美文网首页
iOS开发之Swift篇(11)—— 下标

iOS开发之Swift篇(11)—— 下标

作者: 看影成痴 | 来源:发表于2020-02-25 17:49 被阅读0次

    目录

    • 版本
    • 下标
    • 语法
    • 应用

    版本

    Xcode 11.3.1
    Swift 5.1.3

    下标

    下标可以定义在类、结构体和枚举中,是访问集合、列表或序列中元素的快捷方式。
    可以使用下标的索引,设置和获取值,而不需要再调用对应的存取方法。例如,用下标脚本访问一个数组(Array)实例中的元素可以这样写 someArray[index] ,访问字典(Dictionary)实例中的元素可以这样写 someDictionary[key]。
    对于同一个类型可以定义多个下标脚本,通过索引值类型的不同来进行重载,而且索引值的个数可以是多个。

    语法

    使用 subscript 关键字修饰。
    与实例方法类似,下标显式声明入参(一个或多个)和返回类型。
    与实例方法不同,下标可以设定为读写或只读, 有点像计算型属性的getter和setter。
    基本用法:

    subscript(形参列表) -> 下标返回值类型 {
        get {
          // getter方法执行体, 必须有返回值
        }
        set(形参名) {
          // setter方法执行体, 不能有返回值
        }
    }
    

    应用

    示例:

    struct Sample {
        
        var a = 10
        var b = 20
        var c = 30
        
        subscript(index: Int) -> Int {
            // getter
            get {
                switch (index) {
                case 0:
                    return self.a
                case 1:
                    return self.b
                case 2:
                    return self.c
                default:
                    print("非法的索引值")
                    return 0
                }
            }
            // setter
            set (aValue) {
                switch (index) {
                case 0:
                    self.a = aValue
                case 1:
                    self.b = aValue
                case 2:
                    self.c = aValue
                default:
                    print("非法的索引值")
                }
            }
        }
    }
    
    var sample = Sample()
    print("a=\(sample[0]), b=\(sample[1]), c=\(sample[2])")
    // a=10, b=20, c=30
    let d = sample[3]
    // 非法的索引值
    
    sample[0] = 11
    sample[1] = 22
    sample[2] = 33
    print("a=\(sample[0]), b=\(sample[1]), c=\(sample[2])")
    // a=11, b=22, c=33
    

    上面的例子中可以省略setter的形参, 使用默认的参数名newValue

    相关文章

      网友评论

          本文标题:iOS开发之Swift篇(11)—— 下标

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