有什么区别:
var title:String? = "Title" //1
var title:String! = "Title" //2
var title:String = "Title" //3
如果我要以每种方式设置标题并且我是否被迫以不同的方式打开每个变量,我在说什么?
有什么区别:
var title:String? = "Title" //1
var title:String! = "Title" //2
var title:String = "Title" //3
如果我要以每种方式设置标题并且我是否被迫以不同的方式打开每个变量,我在说什么?
想想?
并!
喜欢一个可能有价值或没有价值的盒子。
我推荐这篇文章。
可能有值或可能没有值的可选框,并且该可选框未展开。
var title:String? = "Title" //second and third picture
您使用这样的未包装值:
if let title = title {
//do sth with title, here is the same like let title: String = "Title"
}
可能有值或可能没有值的可选框,并且该可选框实际上已展开。如果有值并且您访问该值,则可以(第二张图片,只需替换?
为!
),但如果没有值,则应用程序崩溃(第三张图片,只需替换?
为!
)
var title:String! = "Title"
该变量肯定有一个值,并且您不能分配给该值nil
(因为它不是可选的)。可选表示有值或没有值(nil
):
var title:String = "Title" //first picture
title
目前有一个价值Title
,但在未来它可能是nil
。我需要使用可选绑定来解开它:
if let unwrappedTitle = title {
println(unwrappedTitle)
}
或者通过强制使用!
角色展开
let unwrappedTitle = title!
title
如果是,上述将崩溃nil
title
当前的值为"Title"
。它可能为零,但我知道在我使用它时它永远不会。您不需要使用可选绑定或强制使用!
字符解包来解包。
如果在 while 中访问过这个值,你的程序会崩溃nil
,但是编译器会让你把这个值设置为nil
.
title
当前的值为"Title"
。这可能会改变,但变量title
总是会有一些字符串值。我不需要检查nil
可选绑定或强制展开。如果您尝试设置title
为nil
.
var title:String? = "Title" //1 Nil Possible-Force Unwrap needed-Nil checking when use
var title1:String! = "Title"//2 Nil Possible-Force Unwrap not needed-Nil cheking when Use
var title2:String = "Title" //3 Nil Not possible as its initailize when declared-No force unwrap needed-No Nil Cheking is needed.