《Swift开发实战》——第16章,第16.1节下标脚本语法

简介:

本节书摘来自异步社区《Swift开发实战》一书中的第16章,第16.1节下标脚本语法,作者 李宁,更多章节内容可以访问云栖社区“异步社区”公众号查看

第16章 下标脚本
Swift开发实战
在Swift语言中,类(class)、结构体(structure)和枚举(enumeration)等目标中定义下标脚本,被认为是访问对象、集合或序列的快捷方式,不需要再调用实例的特定的赋值和访问方法。在本章的内容中,将详细讲解Swift下标脚本的基本知识。

16.1 下标脚本语法
在Swift语言中,可以使用下标脚本访问一个数组(Array)实例中的元素,参见如下所示的格式。

someArray[index]

在访问字典(Dictionary)实例中的元素时,可以通过如下所示的代码实现。

someDictionary[key]

在Swift语言中,对于同一个目标可以定义多个下标脚本,通过索引值类型的不同进行重载,而且索引值的个数可以是多个。

在Swift程序中使用下标脚本,通过在实例后面的方括号中传入一个或者多个索引值来对实例进行访问和赋值,其语法类似于实例方法和计算型属性的混合。与定义实例方法类似,使用关键字subscript定义下标脚本,显式地声明入参(一个或多个)和返回类型。与实例方法不同的是,下标脚本可以设定为读写或只读,这种方式和计算型属性的getter和setter类似。参见如下所示的演示代码。

subscript(index: Int) -> Int {
    get {
      // 返回与入参匹配的Int类型的值
    }
    set(newValue) {
      // 执行赋值操作
    }
}

在上述代码中,newValue的类型必须和下标脚本定义的返回类型相同。与计算型属性相同的是,即使不写set的入参声明newValue,依然可以在set代码块中使用默认的变量newValue来访问新赋的值。

在Swift语言中,与只读计算型属性一样,可以直接将本应该写在get代码块中的代码写在subscript中。参见如下所示的演示代码。

subscript(index: Int) -> Int {
    // 返回与入参匹配的Int类型的值
}

例如在如下所示的代码中,演示了在TimesTable结构体中使用只读下标脚本的用法,该结构体用来展示传入整数的n倍。


fce710c130da0e49a46daeee515f61eb1faed68d

实例文件main.swift的具体实现代码如下所示。

struct TimesTable {
    let multiplier: Int
    subscript(index: Int) -> Int {
      return multiplier * index
    }
}
let threeTimesTable = TimesTable(multiplier: 3)
println("3的6倍是\(threeTimesTable[6])")
// 输出 "3的6倍是18"

在上述代码中,通过TimesTable结构体创建了一个用来表示索引值3倍的实例,数值3作为结构体构造函数入参初始化实例成员multiplier。此时可以通过下标脚本来得到结果,比如threeTimesTable[6]。上述语句访问了threeTimesTable的第六个元素,返回6的3倍即18。

本实例执行后的效果如图16-1所示。


6e89ea6b7d7a71fed7994da60a7be93d739dbb3a

上述TimesTable例子是基于一个固定的数学公式,这并不适合开放写权限来对threeTimesTable [someIndex]进行赋值操作,这也是为什么附属脚本只定义为只读的原因。

相关文章
|
2月前
|
安全 Swift iOS开发
【Swift开发专栏】Swift基础语法详解
【4月更文挑战第30天】Swift是苹果2014年发布的编程语言,适用于iOS、macOS等多个平台。它比Objective-C更安全、现代、易学。本文主要介绍Swift基础:常量变量(`let`和`var`),数据类型(整数、浮点数、布尔、字符串),元组,可选类型(Optional)。此外,还涉及运算符(算术、比较、逻辑)、控制流(`if`、`for`、`while`、`switch`)以及函数和闭包的使用。通过这些基础知识的学习,可以帮助初学者快速上手Swift。
|
2月前
|
安全 Swift iOS开发
swift语法
swift语法
31 1
|
2月前
|
Swift
Swift语言的语法
Swift语言的语法
46 2
|
JavaScript API Swift
深入浅出Swift(1)——基础语法
深入浅出Swift(1)——基础语法
86 0
|
IDE Shell 开发工具
在 Swift 中编写脚本:Git Hooks
这周,我决定完成因为工作而推迟了一周的 TODO 事项来改进我的 Git 工作流程。
182 1
在 Swift 中编写脚本:Git Hooks
|
Swift
swift语法的基本介绍(Swift中数据类型)
swift语法的基本介绍(Swift中数据类型)
169 1
swift语法的基本介绍(Swift中数据类型)
|
存储 Swift iOS开发
Swift实用小册11: Subscript下标语法的使用
Swift实用小册11: Subscript下标语法的使用
216 0
Swift实用小册11: Subscript下标语法的使用
|
Swift
swift语法的基本介绍(常量和变量)
swift语法的基本介绍(常量和变量)
109 0
|
NoSQL Java Scala
Swift和Scala语法上的诸多相似之处
国外开发者最近发现,WWDC2014上苹果发布的新语言Swift,和古老的Scala语言在语法上存在众多的相似之处。
222 0
Swift和Scala语法上的诸多相似之处
|
安全 JavaScript 前端开发
Swift4语法新特性(二)
Swift4语法新特性
126 0