我是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'只解开可选参数;您是要使用'!'吗?
有什么想法如何从字典中提取字符串,以便我可以使用它?
答案 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)
}