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

标签 ios swift types type-inference

下一行中的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/

相关文章:

ios - 从表中查找空值并将其替换为空格-sqlite

iphone - 你如何清除 UIWebView 的缓存?

ios - Xcode 构建基于 JSON 配置文件动态设置版本

ios - 按钮项的基础 IBAction 基于其他按钮项的标题

arrays - 无法使用类型为 '[ClassName.StructName]' 的索引下标类型为 'ClassName.StructName' 的值

c - 尝试.c :8: error: incompatible types in initialization - c

swift - 我的 CompletionHandler 将不会执行。为什么?

ios - 检查 CMTime 是否在 CMTimeRange 中

java - 逆变类型上的 Kotlin 星投影

Python随机改变数据类型