2016-06-13 5 views
0

私は通知のuserInfoオブジェクトに渡したいRequestErrorの配列を持っています。予想 引数の型に '[NSObjectの:ANYOBJECT]?':通知でAnyObjectに配列をキャストできないのはなぜですか?

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

はなぜ

型の値を変換できません '[[RequestError]文字列]' 私は取得しています

+0

私はあなたの問題が 'ということである疑いがありますRequestError'は 'struct'です。 'struct'の配列は' NSArray'に変換できないため、 'AnyObject'にすることはできません。 – vacawama

+0

'RequestError'が' enum'でもあれば動作しません。これは参照型、すなわち 'クラス 'である必要があります。 – vacawama

答えて

1

RequestErrorenum又はstructある場合、それはNSArrayに変換できないため、参照型、それらの配列がAnyObjectに準拠していますではありません。

あなたはラッパークラスを作成することによってこの問題を回避できます。

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 
    } 
関連する問題