【问题标题】:Swift variable is nil when data type is not specified未指定数据类型时,Swift 变量为零
【发布时间】:2018-01-13 18:48:30
【问题描述】:

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

【问题讨论】:

  • 我认为你的问题中遗漏了一些东西,你的两个句子是一样的吗?
  • 是的,我忘记了数据类型。
  • 您后面的代码会导致编译时错误。请在发布之前确认代码确实重现了问题。
  • 两种类型都没有错误。 let jsonString2:String? = try? String(contentsOf: url)
  • @RAJAMOHAN-S 您的 String 数据类型在问题中是可选的...

标签: ios swift types type-inference


【解决方案1】:

如果你不明确告诉它,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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2012-02-29
    相关资源
    最近更新 更多