美文网首页swift学习
Swift5.1 - 下标(subscript)(8)

Swift5.1 - 下标(subscript)(8)

作者: HChase | 来源:发表于2019-07-22 20:24 被阅读197次
  • 下标(subscript)在数组和字典中使用,但是你可以给任何类型(枚举,结构体,类)增加 下标subscript 的功能;
  • subscript的语法类似实例方法、计算属性,其本质就是方法
struct Person {
    var age = 0
    var no  = 0
    subscript(index: Int) -> Int {
        set {
            if index == 0 {
                age = newValue
            } else {
                no = newValue
            }
        }
        get {
            if index == 0 {
                return age
            } else {
                return no
            }
        }
    }
}

var p = Person()
p[0] = 10
p[1] = 20

print(p.age)  // 10
print(p[0])   // 10

print(p.no)  // 20
print(p[1])  // 20
  • subscript 的返回值类型决定了:
    1. get 方法的返回值类型;
    2. set 方法中 newValue 的类型;
  • subscript 可以接受多个参数,并且是任意类型;
  • subscript 可以没有 set 方法,但必须要有 get 方法;
  • 如果只有 get 方法,可以省略;
struct Person {
    var age = 30

    subscript(index: Int) -> Int {
        if index == 0 {
            return age
        } else {
            return age * 2
        }
    }
}

var p = Person()
print(p[0])  // 30
print(p[1])  // 60
  • subscript 可以设置参数标签;
struct Person {
    var age = 30

    subscript(index i: Int) -> Int {
        if i == 0 {
            return age
        } else {
            return age * 2
        }
    }
}
var p = Person()
print(p[index:0])  // 30
print(p[index:1])  // 60
  • subscript 可以是类型方法;
struct Person {
    static subscript(index i: Int) -> Int {
        if i == 0 {
            return 30
        } else {
            return 60
        }
    }
}
print(Person[index:0])  // 30
print(Person[index:1])  // 60

类和结构体作为返回值对比

类:

class Point {
    var x = 0
    var y = 0
}

class PointM {
    var point = Point()
    subscript(index: Int) -> Point {
        get {
            return point
        }
    }
}

var pm = PointM()
pm[0].x = 10
pm[0].y = 20

print(pm[0].x)  // 10
print(pm[0].y)  // 20

结构体:


可以看出作为只读(get)返回值时,结构体是不可修改的,因为结构体的内存不可变;

接收多个参数的下标

class Matix {
    var data = [
       [1,0,0],
       [0,1,0],
       [0,0,1]
    ]
    subscript(row: Int , col: Int) -> Int {
        set {
            guard row >= 0 && row < 3 && col >= 0 && col < 3 else {
                return
            }
            data[row][col] = newValue
        }
        get {
            guard row >= 0 && row < 3 && col >= 0 && col < 3 else {
                return 0
            }
            return data[row][col]
        }
    }
}

var m = Matix()
m[1, 1] = 3
m[0, 1] = 4

源代码demo

相关文章

  • Swift5.1 - 下标(subscript)(8)

    下标(subscript)在数组和字典中使用,但是你可以给任何类型(枚举,结构体,类)增加 下标subscript...

  • Swift5.1学习随笔之下标subscript

    下标subscript 使用subscript可以给任意类型(枚举、结构体、类)增加下标功能 subscript的...

  • Swift - 下标(Subscript)

    下标(Subscript) 使用 subscript 可以给任意类型(枚举、结构体、类)增加下标功能subscri...

  • Swift-下标(subscript)

    下标(subscript) 使用subscript可以给任意类型(枚举、结构体、类)增加下标功能 subscrip...

  • 下标(subscript)

    使用subscript可以给任意类型(枚举 结构体 类)增加下标功能,有些地方也翻译为:下标脚本 subscr...

  • 下标

    下标(subscript) 使用subscript可以给任意类型(枚举、结构体、类)增加下标功能,有些地方也翻译为...

  • [Swift5.1] 10-下标

    下标(subscript) 使用subscript可以给任意类型(枚举、结构体、类)增加下标功能,有些地方也翻译为...

  • Swift中的下标(subscript)

    下标(subscript) 1、使用subscript可以给任意类型(枚举、结构体、类)增加下标功能,有些地方也翻...

  • 09-方法、下标、继承

    一、方法(Method) mutating @discardableResult 二、下标(subscript) ...

  • Swift 下标subscript

    下标可以定义在类、结构体和枚举中,是访问集合、列表、序列中元素的快捷方式。可以使用下标的索引,设置和获取值,而不需...

网友评论

    本文标题:Swift5.1 - 下标(subscript)(8)

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