如果未指定数据类型,则 Swift 变量为 nil



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 计算出类型,因为它不是显式的。本例中的类型是字符串?可以是零。

// 1
let jsonString = try? String(contentsOf: URL(fileURLWithPath: urlString ?? ""))

在示例 2 中,类型是显式的 (字符串(。 = 右侧的表达式结果类型为 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

最新更新