【问题标题】:Swift Binary operator '+=' cannot be applied to operands of type 'AnyObject!' and 'String!'Swift 二元运算符“+=”不能应用于“AnyObject!”类型的操作数和“字符串!”
【发布时间】:2015-05-02 19:30:09
【问题描述】:

我想在 Parse using Swift 中将当前用户的用户名添加到对象 Participants 的末尾,但标题中出现错误。

obj["Participants"] += kCurrentUser.username

我不知道如何解决它。我已经尝试过.append 和其他一些方法。大家有什么想法吗?

【问题讨论】:

    标签: swift object parse-platform


    【解决方案1】:

    看起来 obj 是一个 NSDictionary。 NSDictionaries 包含每个键的匿名值。因此,当您查找键时,其值是 AnyObject 类型。您不能将字符串附加到 AnyObject。

    您必须使用更详细的语句:

    obj["Participants"] = obj["Participants"] as! String + kCurrentUser.username
    

    (仅当 obj 是可变字典时才有效。如果它是不可变的,它将崩溃。)

    【讨论】:

    • 如果obj 没有键"Participants" 的值,或者如果它有一个值并且该值不能解释为String,它也会崩溃,所以也许我们不要滥用! 运算符?
    • 我怀疑obj["Participants"] 可能是一个数组(他提到他尝试了.append 加上Participants 是一个很好的集合名称)并且他尝试在其中附加一个字符串(而不是重新分配)...
    • 这句话中,第一个!不是多余的吗?因为您已经在使用 ! 将其解包为 String?
    • @milo526,是的,我想第一个 ! 不需要。
    • 为什么投反对票?无论谁对我投了反对票,你能解释一下你认为我的回答在哪里是错误、误导或不足的吗?
    【解决方案2】:

    Swift 语言不做隐式转换,如果两个不同类型的操作数,你必须将其中任何一个转换为另一个操作数类型才能应用二元运算符。

    所以在你的情况下,将 AnyObject 类型的操作数转换为字符串。

    【讨论】:

      【解决方案3】:

      进入 swift 仅几周后就受到了这种影响,但正如前面提到的“Swift 语言不进行隐式类型转换,...​​...”

      对我来说,我有这个代码:

      if objects == nil {
        objects = NSMutableArray()
      }
      

      转换为:

      if objects.count == 0 {
        objects = NSMutableArray()
      }
      

      【讨论】:

        猜你喜欢
        • 2017-02-13
        • 1970-01-01
        • 1970-01-01
        • 2015-09-10
        • 1970-01-01
        • 2021-03-04
        • 2018-04-18
        • 2020-04-30
        • 1970-01-01
        相关资源
        最近更新 更多