swift中可选值之间的区别?

时间:2015-03-14 20:55:56

标签: swift optional-values

有什么区别:

var title:String? = "Title" //1
var title:String! = "Title" //2
var title:String = "Title" //3

如果我以各种方式设置标题并且我被迫以不同的方式展开每个变量,我该怎么说?

3 个答案:

答案 0 :(得分:6)

?!视为可能具有值的框。 enter image description here

我建议this article

  1. 可能具有值或可能不的可选框,并且未打开该可选框。

    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"
    }
    
  2. 可能具有值或可能不的可选框,并且该可选框实际上已解包。如果有值并且您访问该值,那就没关系(第二个图像,只需用?替换!),但如果没有值,则应用程序崩溃(第三张图片,只需将?替换为!

    var title:String! = "Title"
    
  3. 该变量肯定有值,您无法分配此值nil(因为它不是可选的)。可选表示存在值或没有值(nil):

    var title:String = "Title" //first picture
    

答案 1 :(得分:2)

`var title:String? ="标题"`

title目前的值为Title,但将来它可能是nil。我需要使用可选绑定来解开它:

if let unwrappedTitle = title {
   println(unwrappedTitle)
}

或强制使用!字符展开

let unwrappedTitle = title!

如果titlenil

,上述内容将会崩溃

`var title:String! ="标题"`

title目前的值为"Title"。它可能是零,但我知道我使用它时永远不会。您不需要使用可选绑定或使用!字符强制解包来解包它。

如果在nil期间访问此值,您的程序将崩溃,但编译器会允许您将此值设置为nil

`var title:String =" Title"`

title目前的值为"Title"。这可能会改变,但变量title将始终具有一些字符串值。我不需要使用可选绑定或强制解包来检查nil。如果您尝试将title设置为nil,则编译器不会让您构建。

答案 2 :(得分:0)

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.