下一行中的jsonString为nil
let jsonString = try? String(contentsOf: URL(fileURLWithPath:currentMedia?.rawDataFile ?? ""))
当在下面的代码中指定数据类型时,jsonString
不是 nil 而是有一个值:
let jsonString:String = try? String(contentsOf: URL(fileURLWithPath:currentMedia?.rawDataFile ?? ""))
虽然问题出在第一行
try? String(contentsOf: URL(fileURLWithPath:currentMedia?.rawDataFile ?? ""))
被评估为非空字符串值,但 nil 被分配给 jsonString
。当显式类型 String
用于 jsonString
时,期望的非空值被分配给 jsonString
。
我需要帮助来理解这种行为。
最佳答案
如果你不明确地告诉它,Swift 可以确定类型。
在下面的情况 (1) 中,Swift 计算出类型,因为它不是显式的。这种情况下的类型是String?可以为零。
// 1
let jsonString = try? String(contentsOf: URL(fileURLWithPath: urlString ?? ""))
在示例 2 中,类型是显式的 (String)。 = 右边的表达式结果为 String 类型?不能分配给字符串类型的变量。
// 2
let jsonString2: String = try? String(contentsOf: URL(fileURLWithPath: urlString ?? ""))
此外,
// this won't compile
let xstring: String = nil
// no value supplied so it is nil
let xstring2: String?
// no value supplied so it is nil (same as above)
let xstring3: String? = nil
关于ios - 未指定数据类型时 Swift 变量为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45530373/