类、结构体和枚举可以定义下标,它可以作为访问集合、列表或序列成员元素的快捷方式。

下标的语法

subscript(index: Int) -> Int {
    get {
      // 返回一个适当的 Int 类型的值
    }

    set(newValue) {
      // 执行适当的赋值操作
    }
}

1.给自定义对象添加类似数组的特性,添加下标

class Person {
    // 如果是只读属性,可简写
    subscript(index: Int) -> Int { index }
    var name: String = “”
}

var person = Person()
let index = person[1]

需要注意: var person: Person? = Person() 
let index = person[1] // 其中index是可选类型Int?

如果person是可选类型?

person?.name = getName()

那么getName()是不会调用的,编译器的特性,也可以理解,如果左边的为nil,这么代码就停止了,不会接着调用了,类似于if 多条件语句,

if flag1 && flag2 {  } 

一旦发现flag1为false,那么flag2就不会执行判断

2.那么问题来了

var num2: Int? = nil
num2? = 10
print(num)

请问打印什么 答案: nil 为什么? 是因为这个是使用了可选链,发现了是num2== nil nil?便是可选链,不再继续执行赋值操作

var num2: Int? = nil
num2 = 10
print(num2)

请问这个又打印什么 这里只是简单的赋值操作,所以打印Optional(10)