“T?”有什么区别?和T??”

时间:2015-04-10 11:32:59

标签: swift

我理解以下代码......

var dic1: Dictionary<String, String> = ["key" : "value"]
var str1: String? = dic1["key"]// key is not found => nil => String?

但我不能......

var dic2: Dictionary<String, String?> = ["key" : nil]
var str3: String?? = dic2["key"]// key is not found or set nil value => nil => why String??

String的必要性是什么?和字符串的区别?和String ??。

1 个答案:

答案 0 :(得分:4)

String?String??之间的区别如下:

let s1 = Optional<String>()           // String?
let s2 = Optional<Optional<String>>() // String??

参考你的例子:

subscript的{​​{1}}会返回可选类型。 因此,由于Dictionary中的值类型为dic2,因此首先必须解包该可选项以确定该键是否存在该值,然后您必须打开String?

以下是一个示例:

String?