2016-06-13 35 views
0

我有一個RequestError數組,我想傳遞給通知userInfo對象。爲什麼我不能在通知中將數組強制轉換爲AnyObject?

let errors: [RequestError] 
let errorDictionary = ["errors": errors] 
NSNotificationCenter.defaultCenter().notificationCenter.postNotificationName(UserSaveFailKey, object: self, userInfo: errorDictionary) 

爲什麼我越來越

無法將類型的價值 '[字符串:[RequestError]' 預期 參數類型'[NSObject的:AnyObject]?

+0

我懷疑你的問題是' RequestError'是一個'struct'。一個'struct'數組不能轉換爲'NSArray',因此它不能成爲'AnyObject'。 – vacawama

+0

如果'RequestError'也是'enum',它將不會工作。它需要是一個引用類型,即'class'。 – vacawama

回答

1

如果RequestErrorenumstruct,那麼它是不是引用類型和它們的陣列將不符合AnyObject,因爲它不能被轉換成NSArray

您可以解決此通過創建一個包裝類:在接收端

class RequestErrorsWrapper { 
    let errors: [RequestError] 

    init(errors: [RequestError]) { 
     self.errors = errors 
    } 
} 

let errorDictionary = ["errors": RequestErrorsWrapper(errors: errors)] 
NSNotificationCenter.defaultCenter().postNotificationName(UserSaveFailKey, object: self, userInfo: errorDictionary) 

然後,你會解開象這樣的錯誤:

if let wrapper = notification.userInfo?["errors"] as? RequestErrorsWrapper { 
     let errors = wrapper.errors 
     // use errors 
    } 
相關問題