【问题标题】:ambiguous use of subscript swift 2.2下标swift 2.2的模糊使用
【发布时间】:2016-03-28 07:24:55
【问题描述】:

我的代码中有很多关于这个错误的问题。希望如果有人可以在这里帮助我,而不是我能解决剩下的问题。我已经更新到 xcode 7.3 并运行 swift 2.2。

我读到编译器“限制性更强”,我必须告诉它“中间”对象是什么。这让我有些困惑,希望得到进一步的解释。

func getMessage(dictionary:NSDictionary)->String{

    var message = String()
    if let dict = dictionary["aps"] {
        if let message:String = dict["alert"] as? String {
            return message
        }
        else{
           message = ""
        }

    }
    return message   
}

另一个例子:

  for object in objects {
            let getDriver = object.objectForKey("driver")

            if let picture = getDriver!["thumbnailImage"] as? PFFile {
                self.profilePictures.append(picture)
            }
            self.requestsArray.append(object.objectId as String!)
        }

【问题讨论】:

    标签: swift parse-platform swift2 xcode7 xcode7.3


    【解决方案1】:

    字典值的类型总是AnyObject。将类型转换为更具体的内容,例如

    if let dict = dictionary["aps"] as? [String:AnyObject] {
    

    那么编译器就知道键下标是有效且可能的

    第二个例子类似:object 是一个字典,编译器需要知道键 driver 的值也是一个字典

    if let getDriver = object.objectForKey("driver") as? [String:AnyObject] {
       if let picture = getDriver["thumbnailImage"] as? PFFile {
       ...
    

    【讨论】:

    • 好的,谢谢,这似乎解决了该行代码的错误,那么对于我的问题中的第二个代码块,它会是什么?
    • 好的,因为我正在使用 objectForKey,密钥本身只是一个字符串,所以我需要这样转换它?那是一种正确的理解吗?
    • object.objectForKey("driver")object["driver"] 是同义词。您必须将返回的 valueAnyObject 转换为可以键下标的类型
    • 好的,AnyObject 不能下标,我需要将字典键转换为字符串?
    • as [String:AnyObject] 将键转换为String,将值转换为AnyObject
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 2017-08-09
    相关资源
    最近更新 更多