为什么我不能在通知中将数组转换为AnyObject?

时间:2016-06-13 08:58:15

标签: swift nsnotificationcenter

我有一个RequestError数组,我想将其传递给通知userInfo对象。

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

为什么我

  

无法转换类型' [String:[RequestError]]'的值预期   参数类型' [NSObject:AnyObject]?'

1 个答案:

答案 0 :(得分:1)

如果RequestErrorenumstruct,那么它不是引用类型,并且它们的数组将不符合AnyObject,因为它可以& #39; t转换为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
    }