String?,String之间的区别!和字符串
我正在使用此代码:
var myString:String? = nil
var myString1:String = ""
var myString2:String! = nil
println(myString2)
这里它在myString2中给出nil而不是运行时错误。
答案 0 :(得分:1)
有更好的解释,但简单的版本是:
String
是一个字符串。它包含一个String值。
String?
是一个可选字符串。它可以保存String值或nil。您可以打开可选项并立即尝试使用!来访问String值!像这样:
var str: String? = nil
str!.length
该代码将导致运行时错误,因为str为零。获得可选值的更安全的方法是使用if let:
var str: String? = nil
if let myStr = str{
myStr.length
}
它具有与上述代码相同的功能,但不会在nil值上崩溃。
String!
是一个隐式解包的可选项。它的工作方式与常规可选方法相同,但假设它是非零的,所以当你调用它时,它会尝试访问该值,就像它是常规可选项一样!后。
println
适用于所有这些类型的原因是因为它可以使用字符串,字符串选项和nil值并处理它们。
var str: String? = "hello world"
println(str)
println(str!)
println(nil)
一切都应该有效。
答案 1 :(得分:0)
@ connor的回答是正确的。
var Amy:Wife? // Amy is your girlfriend, she may or may not be your wife.
var Amy:Wife // Amy is your wife.
var Amy:Wife! // Amy will be your wife, no matter you like it or not.