为啥我不能在通知中将数组转换为 AnyObject?
Posted
技术标签:
【中文标题】为啥我不能在通知中将数组转换为 AnyObject?【英文标题】:Why can't I cast an array to AnyObject in a notification?为什么我不能在通知中将数组转换为 AnyObject? 【发布时间】:2016-06-13 08:58:14 【问题描述】:我有一个 RequestError 数组,我想将它传递给通知 userInfo 对象。
let errors: [RequestError]
let errorDictionary = ["errors": errors]
NSNotificationCenter.defaultCenter().notificationCenter.postNotificationName(UserSaveFailKey, object: self, userInfo: errorDictionary)
我为什么会得到
无法将“[String : [RequestError]]”类型的值转换为预期值 参数类型 '[NSObject : AnyObject]?'
【问题讨论】:
我怀疑你的问题是RequestError
是struct
。 struct
的数组不能转换为 NSArray
,因此它不能是 AnyObject
。
如果RequestError
也是enum
也不起作用。它必须是引用类型,即class
。
【参考方案1】:
如果RequestError
是enum
或struct
,则它不是引用类型,并且它们的数组将不符合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
【讨论】:
以上是关于为啥我不能在通知中将数组转换为 AnyObject?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 2.3 中将 UInt8 转换为 Anyobject
将 json 数据转换为 [[String: AnyObject]] 后,它似乎是空的 - 为啥?