jsonString在以下行中为零
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
。
我需要帮助理解这种行为。
答案 0 :(得分:1)
如果您没有明确说明,Swift可以确定类型。
在下面的情况(1)中,Swift计算出类型,因为它不明确。这种情况下的类型是String?这可能是零。
// 1
let jsonString = try? String(contentsOf: URL(fileURLWithPath: urlString ?? ""))
在示例2中,类型是显式的(String)。 =右边的表达式导致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