swift 中的可选值之间的差异?
Difference between optional values in swift?
有什么区别:
var title:String? = "Title" //1
var title:String! = "Title" //2
var title:String = "Title" //3
如果我以各种方式设置标题,我会被迫以不同的方式展开每个变量,我在说什么?
将 ?
和 !
想象成一个可能有值或没有值的盒子。
我推荐this article。
可能有值或可能没有的可选框,并且该可选框未展开。
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"
}
可能有值或可能没有的可选框,并且该可选框实际上是展开的。如果有一个值并且你访问那个值,那没问题(second image,只需将 ?
替换为 !
),但如果没有值,然后应用程序崩溃(第三张图片,只需将 ?
替换为 !
)
var title:String! = "Title"
那个变量肯定有一个值,你不能给这个值赋值nil
(因为它不是可选的)。 Optional表示有值或者没有值(nil
):
var title:String = "Title" //first picture
`var title:String? = "Title"`
title
目前的值为 Title
,但将来可能是 nil
。我将需要使用可选绑定来解包它:
if let unwrappedTitle = title {
println(unwrappedTitle)
}
或者用 !
字符强制解包
let unwrappedTitle = title!
如果 title
是 nil
,上面的代码会崩溃
`var title:String! = "Title"`
title
当前的值为 "Title"
。它可能是零,但我知道当我使用它时它永远不会是。您不需要使用可选绑定或通过使用 !
字符强制解包来解包。
如果在 nil
期间访问此值,您的程序将崩溃,但编译器会让您将此值设置为 nil
。
`var title:String = "Title"`
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.
有什么区别:
var title:String? = "Title" //1
var title:String! = "Title" //2
var title:String = "Title" //3
如果我以各种方式设置标题,我会被迫以不同的方式展开每个变量,我在说什么?
将 ?
和 !
想象成一个可能有值或没有值的盒子。
我推荐this article。
可能有值或可能没有的可选框,并且该可选框未展开。
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" }
可能有值或可能没有的可选框,并且该可选框实际上是展开的。如果有一个值并且你访问那个值,那没问题(second image,只需将
?
替换为!
),但如果没有值,然后应用程序崩溃(第三张图片,只需将?
替换为!
)var title:String! = "Title"
那个变量肯定有一个值,你不能给这个值赋值
nil
(因为它不是可选的)。 Optional表示有值或者没有值(nil
):var title:String = "Title" //first picture
`var title:String? = "Title"`
title
目前的值为 Title
,但将来可能是 nil
。我将需要使用可选绑定来解包它:
if let unwrappedTitle = title {
println(unwrappedTitle)
}
或者用 !
字符强制解包
let unwrappedTitle = title!
如果 title
是 nil
`var title:String! = "Title"`
title
当前的值为 "Title"
。它可能是零,但我知道当我使用它时它永远不会是。您不需要使用可选绑定或通过使用 !
字符强制解包来解包。
如果在 nil
期间访问此值,您的程序将崩溃,但编译器会让您将此值设置为 nil
。
`var title:String = "Title"`
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.