栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Swift中的下标(subscript)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Swift中的下标(subscript)

 

下标(subscript)

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

        subscript的语法类似于实例方法、计算属性,本质就是方法(函数)

2、subscript中定义的返回值类型决定了,get方法的返回值类型,set方法中newValue的类型。

class Point {
    var x = 0.0, y = 0.0
    
    subscript(index: Int) -> Double {
        set {
            if index == 0 {
                x = newValue
            } else if index == 1 {
                y = newValue
            }
        }
        
        get {
            if index == 0 {
                return x
            } else if index == 1 {
                return y
            }
            return 0
        }
    }
}

var p = Point()
p[0] = 11.1
p[1] = 22.2
print(p.x)
print(p.y)
print(p[0])
print(p[1])

3、subscript可以接受多个参数,并且类型任意。

4、subscript可以没有set方法,但必须要有get方法。

        如果只有get方法,可以省略get

class Point {
    var x = 0.0, y = 0.0
    
    subscript(index: Int) -> Double {
        if index == 0 {
            return x
        } else if index == 1 {
            return y
        }
        return 0
    }
}

5、可以设置参数标签

class Point {
    var x = 0.0, y = 0.0
    
    subscript(index i: Int) -> Double {
        if i == 0 {
            return x
        } else if i == 1 {
            return y
        }
        return 0
    }
}

var p = Point()
p.y = 22.2
print(p[index: 1]) //22.2

6、下标可以是类型方法

class Sum {
    static subscript(v1: Int, v2: Int) -> Int {
        return v1 + v2
    }
}

print(Sum[10, 20]) //30

7、本质是调用里面的set和get方法

 8、结构体、类作为返回值对比

class Point {
    var x = 10, y = 10
}

class PointManager {
    var point = Point()
    
    subscript(index: Int) -> Point {
//        set {
//            point = newValue
//        }
        
        get {
            return point
        }
    }
}

var pm = PointManager()
pm[0].x = 11
pm[0].y = 22

Point如果是类的话,可以不用写set方法,Point如果是结构体的话必须要写set方法。

9、接收多个参数的下标

class Grid {
    var data = [
        [0, 1, 2],
        [3, 4, 5],
        [6, 7, 8]
    ]
    
    subscript(row: Int, column: Int) -> Int {
        set {
            guard row >= 0 && row < 3 && column >= 0 && column < 3 else {
                return
            }
            data[row][column] = newValue
        }
        
        get {
            guard row >= 0 && row < 3 && column >= 0 && column < 3 else {
                return 0
            }
            return data[row][column]
        }
    }
}

var grid = Grid()
grid[0, 1] = 77
grid[1, 2] = 88
grid[2, 0] = 99
print(grid.data)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1002776.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号