美文网首页
可选链的注意事项

可选链的注意事项

作者: 枫叶1234 | 来源:发表于2018-04-23 18:56 被阅读3次

可选绑定不能用于结构体:因为结构体是值类型,可选绑定用于类类型的

struct Person {

var name: String

var age: Int

}

var optionalLisa: Person? = Person(name: "Lisa Simpson", age: 8)


// 如果不是 nil,则增加

if optionalLisa != nil {

optionalLisa!.age += 1

}

这种写法非常繁琐,也很丑陋。特别注意,在这种情况下你不能使用可选绑定。因为 Person 是一个结构体,它是一个值类型,绑定后的值只是原来的值的局部作用域的复制,对这个复制进行变更,并不会影响原来的值:

if var lisa = optionalLisa {

// 对 lisa 的变更不会改变 optionalLisa 中的属性

lisa.age += 1

}

如果 Person 是类的话,这么做是可行的。我们会在结构体和类中进一步讨论值类型和引用类型的差异。就算能用可选绑定,这么写还是太过复杂了。其实,你可以使用可选值链来进行赋值,如果它不是 nil 的话,赋值操作将会成功:”

optionalLisa?.age += 1

一个有点古怪 (但是逻辑上是合理) 的边界情况是它也支持对可选值的直接赋值。下面的写法是合法的:

var a: Int? = 5

a? = 10

a // Optional(10)

var b: Int? = nil

b? = 10

b // nil

请注意 a = 10 和 a? = 10 的细微不同。前一种写法无条件地将一个新值赋给变量,而后一种写法只在 a 的值在赋值发生前不是 nil 的时候才生效。”

一个有点古怪 (但是逻辑上是合理) 的边界情况是它也支持对可选值的直接赋值。下面的写法是合法的:

var a: Int? = 5

a? = 10

a // Optional(10)

var b: Int? = nil

b? = 10

b // nil

请注意 a = 10 和 a? = 10 的细微不同。前一种写法无条件地将一个新值赋给变量,而后一种写法只在 a 的值在赋值发生前不是 nil 的时候才生效。”

相关文章

  • 可选链的注意事项

    可选绑定不能用于结构体:因为结构体是值类型,可选绑定用于类类型的 这种写法非常繁琐,也很丑陋。特别注意,在这种情况...

  • Swift-13.可选类型深入探讨

    本章包含内容: 可选类型深入探讨 可选链的介绍 可选链的返回值 可选链调用下标索引 可选链的赋值操作 基于多层链接...

  • swift3语法(十三)

    可选链 定义可选链在取值可能为空的属性、方法、下标后面加上 ? 就表示一个可选链在可选值后面加上 ! 来强制展开,...

  • iOS开发 - 「Swift 学习」Swift 可选链

    Swift 可选链 可选链的定义:可选链是可以请求和调用属性、方法和子脚本的过程,用于请求或调用的目标可能为nil...

  • swift面向对象基础<三>

    接下来就讨论一下可选链,类型属性和类型方法,构造器 1.可选链是用于处理可选类型的属性,方法和下标2.使用可选链代...

  • 15 可选链和异常处理

    1. 可选链 1.1 可选链的概念 它的可选性体现于请求或调用的目标当前可能为空(nil)如果可选的目标有值,那么...

  • Swift - 可选链

    可选链 可选链 它的可选性体现于请求或者调用的目标当前可能为空 (nil)如果可选的目标有值,那么调用就会成功;如...

  • Swift基础语法-可选链

    1. 可选连的概念 可选链:有多个可选类型组成的一个链条被称之为可选链 它的可选性体现于请求或调用的目标当前可能为...

  • 十三、可选链、协议、元类型

    可选链 可选链是一个调用和查询可选属性、方法和下标的过程,它可能为 nil 如果可选项是 nil ,属性、方法或者...

  • 【骚操作系列】一、如何通过babel配置使用可选链`?.`和双问

    如何通过babel配置使用可选链?.和双问号?? 什么是可选链 https://developer.mozilla...

网友评论

      本文标题:可选链的注意事项

      本文链接:https://www.haomeiwen.com/subject/otollftx.html