Swift基础入门知识学习(16)-下標-讲给你懂

TED演讲的8个秘诀:学习18分钟高效表达-重点笔记

Swift基础入门知识学习(15)-方法-讲给你懂


理解难度
★★★☆☆
实用程度
★★☆☆☆

下标(subscript)是一个可以快速存取及设置值的方式,单看中文字面上可能不太清楚什么意思。其实在前面介绍数组(array)及字典(dictionary)时已经有接触过,在数组或字典名称后面紧接着中括号[ ],括号内填入数组的索引值(index)或是字典的键(key),即可存取或设置值,以下是个例子:

// 声明一个 [Int] 类型的数组
var arr = [1,2,3,4,5,6,7]

// 打印出其内第三个元素(请记得 数组的索引值是从 0 开始算起)
print(arr[2])

// 修改第四个元素为 12
arr[3] = 12


// 声明一个 [String:String] 类型的字典
var dict = ["name":"Kevin","city":"Taipei"]

// 打印出键为 name 的值
print(dict["name"]!)

// 修改键为 city 的值为 New York
dict["city"] = "New York"

下标语法

下标也可以定义在类(class)、结构体(structure)及列举(enumeration)中,方式如下:

subscript(索引值: 索引值类型) -> 返回值类型 {
    get {
        // 存取值的代码操作
        // 必须返回一个前面定义的类型的值
    }
    set(新设置值的名称) {
        // 设置值的代码操作
    }
}

与前面介绍过的计算型属性相似,可以定义为读写(getter及setter),也可以定义为唯读(getter)。setter传入的设置值名称也可以省略,省略时会有一个内建预设的名称newValue。这两种方式定义如下:

// 当下标为唯读时 可以将 get 关键字及大括号 {} 省略掉 如下
subscript(索引值: 索引值类型) -> 返回值类型 {
    // 存取值的代码操作
    // 必须返回一个前面定义的类型的值
}


// 省略 setter 传入的设置值名称 会有一个内建预设名称 newValue
subscript(索引值: 索引值类型) -> 返回值类型 {
    get {
    }
    set{
        // 设置值的代码操作
        // 可使用 newValue 来操作
    }
}

实例 1

struct subexample {
    let decrementer: Int
    subscript(index: Int) -> Int {
        return decrementer / index
    }
}
let division = subexample(decrementer: 100)

print("100 除以 9 等于 \(division[9])")
print("100 除以 2 等于 \(division[2])")
print("100 除以 3 等于 \(division[3])")
print("100 除以 5 等于 \(division[5])")
print("100 除以 7 等于 \(division[7])")

在上例中,通过 subexample 结构体创建了一个除法运算的实例。数值 100 作为结构体构造函数传入参数初始化实例成员 decrementer。
你可以通过下标脚本来得到结果,比如 division[2] 即为 100 除以 2。

下标用法

下面是在一个类中定义下标的例子:

// 定义一个简单数学算式功能的类别
class SimpleMath {
    // 一个数字属性预设值
    var num = 500

    // 定义一个下标 为乘法
    subscript(times: String) -> Int {
        get {
            // 其内可以使用这个索引值
            print(times)

            // 会返回 数字属性乘以 2 的数值
            return num * 2
        }
        set {
            // 将数字属性乘以新的倍数
            num *= newValue
        }
    }

    // 定义另一个下标 为除法
    subscript(divided: Int) -> Int {
        return num / divided
    }
}

// 声明一个类别 SimpleMath 的常数
let oneMath = SimpleMath()

// 打印出:1000
print(oneMath["simple"])

// 传入值为 3, 会将数字属性乘以 3
oneMath["star"] = 3

// 这个下标例子中的字串索引值没有被使用到
// 其实是可以依照传入的索引值 来做不同的需求及返回值

// 打印出:1500
print(oneMath.num)

// 使用到另一个下标 索引值类型为 Int
// 打印出:15
print(oneMath[100])

下标可以定义多个索引值,可以是任意类型的参数或可变数量参数,返回值也可以是任意类型,但不能使用输入输出参数(inout),也不能给参数设置预设值。

如上述代码,类别或结构体可以定义多个下标,使用下标时会依据索引值数量及类型,自动推断使用合适的下标。

Swift基础入门知识学习(17)-繼承-讲给你懂

我们如何正确思维-重点笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MillVA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值