代码之家  ›  专栏  ›  技术社区  ›  Sjakelien

对象(可选):获取元素

  •  0
  • Sjakelien  · 技术社区  · 3 年前

    标准的方法是设置userinfo。但是,我要传递的数据是一个集合,而不是一个字典。

    因此,我这样做:

    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]
    

    我做错了什么?

    2 回复  |  直到 3 年前
        1
  •  1
  •   EmilioPelaez    3 年前

    你知道吗 notification.object 是一个 Set Any ,这意味着它可以是任何东西,因此它无法找到 object[0] 它应该使用。

    要读取此对象,需要将其强制转换为一个集合。

    if let mySet = notification.object as? Set<MyType> {
      // Do whatever
    }
    

    object 性质 Notification 被设计为用作过滤器,如果在添加观察者时传递值,则只会收到与该对象完全相同的通知。

    这个 userInfo

    NotificationCenter.default.post(name: MY_NOTIFICATION_NAME, object: nil, userInfo: ["products": productIds])
    
        2
  •  1
  •   jrturton    3 年前

    通知的对象类型为 Any? .

    po Any 我能行。

    当你要求它下标时, 无法执行此操作,因为未在该类型上定义订阅。您需要将其强制转换为预期类型:

    po (notification.object as? [String])?[0]
    

    一般来说,最好确定任何类型的 任何 尽快。想想 作为一个盒子,用来邮寄东西。你要做的第一件事就是打开它,看看里面是什么。