快速可选类型中的`!`和`?`运算符有什么区别?

石ia

例如

class Person {
    let name: String
    init(name: String) { self.name = name }
    var apartment: Apartment?
    deinit { print("\(name) is being deinitialized") }
}

class Apartment {
    let number: Int
    init(number: Int) { self.number = number }
    var tenant: Person?
    deinit { print("Apartment #\(number) is being deinitialized") }
}

var john: Person?
var number73: Apartment?

john = Person(name: "John Appleseed")
number73 = Apartment(number: 73)

john?.apartment?.tenant?.name

john!.apartment = number73
number73!.tenant = john

//john?.apartment = number73
//number73?.tenant = john

john?.apartment?.tenant?.name

看来john?.apartment = number73john!.apartment = number73两者都可行,两者有什么区别,在这种情况下,首选哪一个?非常感谢。

瓦迪安

案件 john?.apartment = number73

  • 如果johnnil,则什么都不做(与nil在Objective-C中向发送消息相同
  • 如果john不是nil,请分配编号。

案件 john!.apartment = number73

  • 如果johnnil,则引发运行时错误,也称为崩溃(著名错误:致命错误:在展开可选值时意外发现nil
  • 如果john不是nil,请分配编号。

如果可以确保john不是nil,请使用感叹号。
如果john可能的话nil,请使用问号。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

:=和=运算符有什么区别?

来自分类Dev

!=和<>运算符有什么区别?

来自分类Dev

Comparable和运算符compareTo有什么区别?

来自分类Dev

:=和=运算符有什么区别?

来自分类Dev

vhdl +运算符和+函数有什么区别?

来自分类Dev

Autohotkey::= 和 = 赋值运算符有什么区别

来自分类Dev

r编程语言中的'/'运算符和“%/%”运算符有什么区别?

来自分类Dev

ggplot2中的“ +”运算符与magrittr中的“%>%”运算符有什么区别?

来自分类Dev

JavaScript中+运算符和concat()方法有什么区别

来自分类Dev

rxjs 5中的发布和多播运算符有什么区别?

来自分类Dev

fdefiniton和CL中的函数(特殊运算符)有什么区别?

来自分类Dev

在R编程中,any和|之间有什么区别?(或)布尔运算符?

来自分类Dev

Jsonnet中的+运算符和std.mergePatch有什么区别?

来自分类Dev

`numpy`中的`slice`(:)和`ellipsis`(...)运算符有什么区别?

来自分类Dev

ifelse和Julia中的三元运算符有什么区别?

来自分类Dev

NHibernate Linq中的Equals方法和==运算符有什么区别?

来自分类Dev

subscribe 和 catch 运算符中的 onError 有什么区别?

来自分类Dev

逗号运算符和逗号分隔符有什么区别?

来自分类Dev

C ++数组运算符和*(array + index)(如果有)有什么区别?

来自分类Dev

逻辑AND运算符与嵌套的if语句有什么区别?

来自分类Dev

<< 运算符的这些重载有什么区别

来自分类Dev

Angular 2:ngIf指令中比较运算符==和===之间有什么区别

来自分类Dev

>运算符和Set-Content cmdlet有什么区别

来自分类Dev

不实现和删除通用运算符有什么区别?

来自分类Dev

显式原子加载/存储与常规operator =和运算符T有什么区别?

来自分类Dev

LR(1)语法和运算符优先级语法有什么区别?

来自分类Dev

相等运算符和deepEquals in go有什么区别?

来自分类Dev

在性能方面,UNION和CONCATENATION运算符有什么区别?

来自分类Dev

RxJS运算符“ buffer”和“ bufferWhen”有什么区别?

Related 相关文章

  1. 1

    :=和=运算符有什么区别?

  2. 2

    !=和<>运算符有什么区别?

  3. 3

    Comparable和运算符compareTo有什么区别?

  4. 4

    :=和=运算符有什么区别?

  5. 5

    vhdl +运算符和+函数有什么区别?

  6. 6

    Autohotkey::= 和 = 赋值运算符有什么区别

  7. 7

    r编程语言中的'/'运算符和“%/%”运算符有什么区别?

  8. 8

    ggplot2中的“ +”运算符与magrittr中的“%>%”运算符有什么区别?

  9. 9

    JavaScript中+运算符和concat()方法有什么区别

  10. 10

    rxjs 5中的发布和多播运算符有什么区别?

  11. 11

    fdefiniton和CL中的函数(特殊运算符)有什么区别?

  12. 12

    在R编程中,any和|之间有什么区别?(或)布尔运算符?

  13. 13

    Jsonnet中的+运算符和std.mergePatch有什么区别?

  14. 14

    `numpy`中的`slice`(:)和`ellipsis`(...)运算符有什么区别?

  15. 15

    ifelse和Julia中的三元运算符有什么区别?

  16. 16

    NHibernate Linq中的Equals方法和==运算符有什么区别?

  17. 17

    subscribe 和 catch 运算符中的 onError 有什么区别?

  18. 18

    逗号运算符和逗号分隔符有什么区别?

  19. 19

    C ++数组运算符和*(array + index)(如果有)有什么区别?

  20. 20

    逻辑AND运算符与嵌套的if语句有什么区别?

  21. 21

    << 运算符的这些重载有什么区别

  22. 22

    Angular 2:ngIf指令中比较运算符==和===之间有什么区别

  23. 23

    >运算符和Set-Content cmdlet有什么区别

  24. 24

    不实现和删除通用运算符有什么区别?

  25. 25

    显式原子加载/存储与常规operator =和运算符T有什么区别?

  26. 26

    LR(1)语法和运算符优先级语法有什么区别?

  27. 27

    相等运算符和deepEquals in go有什么区别?

  28. 28

    在性能方面,UNION和CONCATENATION运算符有什么区别?

  29. 29

    RxJS运算符“ buffer”和“ bufferWhen”有什么区别?

热门标签

归档