Switft字典问题“字符串?”不能转换为'String';您是要使用“ as!”吗?强迫沮丧?

时间:2018-12-05 08:45:53

标签: swift dictionary

我是Swift和ObjC的新手,无法使用这段简单的代码来工作。我收到错误“字符串?”不能转换为'String';您是要使用“ as!”吗?强迫向下垂?

    guard let data = context as? Dictionary<String,String> else {return}

    var str : String

    str = data["Score"] as String //<<<I get the error here

当我将其更改为as时!我知道收到此警告:强制从“字符串”强制转换? 'String'只解开可选参数;您是要使用'!'吗?

有什么想法如何从字典中提取字符串,以便我可以使用它?

5 个答案:

答案 0 :(得分:5)

您的字典中可能未设置键“分数”,并且可能返回nil。使用此代码解开可选的内容:

if let score = data["Score"] {
    str = score
}

由于您已经将context展开为Dictionary<String, String>,因此Swift会自动将score的类型推断为String。

答案 1 :(得分:0)

您无需进行强制转换,因为data字典将始终返回可选的String类型,并且您可以使用guard语句

guard let str = data[Score] else { return }
// Your code here

答案 2 :(得分:0)

Dictionary下标返回的类型是可选的,因为用不存在的键下标是有效的。因此,根据错误消息,在具有String值的字典中,返回类型为String?

如果您确定该键始终存在于字典中,则可以将其强制data["Score"]!拆开以使其成为String类型(不进行强制转换,但是如果不存在则崩溃) )。否则,以某种方式处理nil,例如if let str = data["Score"]str = data["Score"] ?? "0"

答案 3 :(得分:0)

像这样使用:

if let dataDictionary = context as? [String: Any] {
        if let someString = dataDictionary["score"] as? String {
            print(someString)
        }
    }

答案 4 :(得分:0)

我们不知道您正在使用哪种数据,但是您很可能会找回实际上类型为[String: String]的字典,在这种情况下,您将:

func getData(context: [String: String]) {
    guard let str = context["Score"] else {
        return
    }
    print(str)
}

...或者您真的要找回[String: Any]类型的字典(在数据库字典中更常见),在这种情况下,您将:

func getData(context: [String: Any]) {
    guard let str = context["Score"] as? String else {
        return
    }
    print(str)
}