Swift Switft字典问题&x27;字符串?';不可转换为';字符串';;你是想用';作为';迫使沮丧?

Swift Switft字典问题&x27;字符串?';不可转换为';字符串';;你是想用';作为';迫使沮丧?,swift,dictionary,Swift,Dictionary,我是Swift和ObjC的新手,不能让这个简单的代码工作。我发现错误“String?”不能转换为“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 guard le

我是Swift和ObjC的新手,不能让这个简单的代码工作。我发现错误“String?”不能转换为“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
guard let data=context as?字典else{return}
var-str:String

str=data[“Score”]作为字符串//可能是您的字典中没有设置键“Score”,并且可能返回nil。使用此代码展开可选的:

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

由于您已经将
上下文
解包到
字典
,Swift将自动推断
分数的类型为字符串。

可能的情况是,您的字典中没有设置键“分数”,并且可能返回零。使用此代码打开可选:

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

由于您已将
上下文
展开到
字典
,Swift将自动推断
分数
的类型为字符串。

您不需要强制转换,因为
数据
字典将始终返回可选的
字符串
类型,并且您可以使用
保护
语句

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

您不需要强制转换,因为
数据
字典将始终返回可选的
字符串
类型,并且您可以使用
保护
语句

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

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


如果您确信该键始终存在于字典中,则可以将其强制展开为
data[“Score”]
使类型
字符串
(不强制转换,但如果不存在则崩溃)。否则,以某种方式处理
nil
,例如,如果让str=data[“Score”]
str=data[“Score”]??“0”

订阅
字典所返回的类型是可选的,因为使用不存在的键对其进行订阅是有效的。因此,根据错误消息,在具有
String
值的字典中,返回类型为
String?

如果您确信该键始终存在于字典中,则可以将其强制展开为
data[“Score”]
使类型
字符串
(不强制转换,但如果不存在则崩溃)。否则,以某种方式处理
nil
,例如,如果让str=data[“Score”]
str=data[“Score”]??“0”

如下使用:

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

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

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

func getData(context: [String: String]) {
    guard let str = context["Score"] else {
        return
    }
    print(str)
}
func getData(context: [String: Any]) {
    guard let str = context["Score"] as? String else {
        return
    }
    print(str)
}
…或者您真的要返回类型为
[String:Any]
(更常见于数据库词典)的词典,在这种情况下,您将:

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

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

func getData(context: [String: String]) {
    guard let str = context["Score"] else {
        return
    }
    print(str)
}
func getData(context: [String: Any]) {
    guard let str = context["Score"] as? String else {
        return
    }
    print(str)
}
…或者您真的要返回类型为
[String:Any]
(更常见于数据库词典)的词典,在这种情况下,您将:

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

您不需要强制转换它,但是执行
data[“Score”]
的结果可能为空。您应该理解以下内容。每次在Objective-C中获得
NSString
,它可以是零。在Swift中,这取决于上下文。对于
字典
它将是
字符串?
。这意味着字符串可以为零。你读过苹果关于斯威夫特的书吗?:)您不需要强制转换它,但是执行
data[“Score”]
的结果可能为空。您应该理解以下内容。每次在Objective-C中获得
NSString
,它可以是零。在Swift中,这取决于上下文。对于
字典
它将是
字符串?
。这意味着字符串可以为零。你读过苹果关于斯威夫特的书吗?:)