我觉得我对于解开'展开的概念感到困惑。一个可选的值,任何指导都将非常感谢!
根据Swift编程语言指南,可选项需要在可以使用之前解包,除非使用!隐式解包。
来自:Apple Inc.“The Swift Programming Language。”iBooks。 https://itun.es/gb/jEUH0.l:
let possibleString: String? = "An optional string."
println(possibleString!) // requires an exclamation mark to access its value
,而
let assumedString: String! = "An implicitly unwrapped optional string."
println(assumedString) // no exclamation mark is needed to access its value
但是,在Xcode中,我可以执行以下操作并仍然打印可选字符串的值:
let teamname: String? = "Liverpool!"
println("Come on \(teamname)")
我错过了什么?
答案 0 :(得分:2)
可选项需要解包,但您不必总是自己动手。
var teamname: String? = "Liverpool"
println("Come on \(teamname)")
在这种情况下,字符串插值将检查可选项然后解包并将其值添加到String。如果Optional为nil,则会添加" nil"改为使用String。
为了访问String的属性和方法,您必须显式解包它。如果您不知道它是否为零,则应使用if语句进行检查。
if teamname != nil {
var newName = teamname!.capitalizedString
}
答案 1 :(得分:2)
首先,只有在不允许使用可选项的地方使用可选项时,可选项才需要解包。 (例如,将String?
分配给String
)
var optionalString: String? = "Some string"
var absolutelyAString: String = "Another string"
// absolutelyAString = optionalString // Error. Needs to unwrap
absolutelyAString = optionalString! // OK.
"展开"基本上意味着"保证价值不是零"。只需将其视为非可空类型的投射。
其次,println()
接受选项很好但是因为它会为你检查你的变量。如果您的变量的值为nil
,则会打印" nil&#34 ;;否则它会打印由Streamable
,Printable
或DebugPrintable
协议实现的字符串。