Object (Optional Any): 获取元素
Object (Optional Any): get elements
我正在尝试在我的应用程序中传递带有观察到的通知的信息。
做到这一点的标准方法是设置用户信息。但是,我要传递的数据是一个集合,而不是一个字典。
所以,我这样做:
NotificationCenter.default.post(name: MY_NOTIFICATION_NAME, object:self.productIds)
物品顺利到达,但现在我无法拿到它:
我在控制台中这样做:
po notification.object!
▿ 2 elements
- 0 : ZTJ
- 1 : ZTM
但是,当我尝试获取其中一个元素时,我得到了这个:
po notification.object![0]
error: <EXPR>:8:21: error: value of type 'Any' has no subscripts
notification.object![0]
我做错了什么?
通知的对象类型为 Any?
。
当您在控制台中 po
时,您要求它打印其描述,Any
可以做到。
当你要求它下标时,Any
不能那样做,因为没有在该类型上定义下标。您需要将其转换为预期的类型:
po (notification.object as? [String])?[0]
一般来说,最好尽快确定 Any
的类型。将 Any
想象成一个用来通过 post 发送东西的盒子。你做的第一件事就是打开它,看看里面有什么。
你知道 notification.object
是一个 Set
,但编译器不知道,因为它被声明为 Any
,这意味着它可以是任何东西,所以它不能找到它应该使用 object[0]
的哪个实现。
要读取此对象,您需要将其转换为集合。
if let mySet = notification.object as? Set<MyType> {
// Do whatever
}
记住 object
属性 of Notification
是设计用来作为过滤器的,如果你在添加观察者时传递一个值,你只会得到与完全相同的对象一起发送的通知。
userInfo
字典是为了发送相关信息,喜欢你的设置。在这种情况下,我会发送这样的字典:
NotificationCenter.default.post(name: MY_NOTIFICATION_NAME, object: nil, userInfo: ["products": productIds])
我正在尝试在我的应用程序中传递带有观察到的通知的信息。 做到这一点的标准方法是设置用户信息。但是,我要传递的数据是一个集合,而不是一个字典。
所以,我这样做:
NotificationCenter.default.post(name: MY_NOTIFICATION_NAME, object:self.productIds)
物品顺利到达,但现在我无法拿到它:
我在控制台中这样做:
po notification.object!
▿ 2 elements
- 0 : ZTJ
- 1 : ZTM
但是,当我尝试获取其中一个元素时,我得到了这个:
po notification.object![0]
error: <EXPR>:8:21: error: value of type 'Any' has no subscripts
notification.object![0]
我做错了什么?
通知的对象类型为 Any?
。
当您在控制台中 po
时,您要求它打印其描述,Any
可以做到。
当你要求它下标时,Any
不能那样做,因为没有在该类型上定义下标。您需要将其转换为预期的类型:
po (notification.object as? [String])?[0]
一般来说,最好尽快确定 Any
的类型。将 Any
想象成一个用来通过 post 发送东西的盒子。你做的第一件事就是打开它,看看里面有什么。
你知道 notification.object
是一个 Set
,但编译器不知道,因为它被声明为 Any
,这意味着它可以是任何东西,所以它不能找到它应该使用 object[0]
的哪个实现。
要读取此对象,您需要将其转换为集合。
if let mySet = notification.object as? Set<MyType> {
// Do whatever
}
记住 object
属性 of Notification
是设计用来作为过滤器的,如果你在添加观察者时传递一个值,你只会得到与完全相同的对象一起发送的通知。
userInfo
字典是为了发送相关信息,喜欢你的设置。在这种情况下,我会发送这样的字典:
NotificationCenter.default.post(name: MY_NOTIFICATION_NAME, object: nil, userInfo: ["products": productIds])