未指定数据类型时,Swift变量为nil

时间:2017-08-06 09:01:45

标签: ios swift types type-inference

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。 我需要帮助理解这种行为。

1 个答案:

答案 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