[英]Difference between optional values in swift?
有什么区别:
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" }
可选框, 可能有值或可能没有 ,并且可选框实际上是打开的。 如果有值并且您访问该值,那就没问题( 第二张图片 ,只需替换?
with !
),但如果没有值,则应用程序崩溃( 第三张图片 ,只需替换?
with !
)
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"
。 它可能是零,但我知道我使用它时永远不会。 您不需要使用可选绑定或通过强制解包来展开它!
字符。
如果在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.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.