Swift2.0语言教程之下标脚本
Swift2.0语言教程之下标脚本
下标脚本
下标脚本是访问对象、集合或者序列的快速方式。开发者不需要调用实例特定的赋值和访问方法,就可以直接访问所需要的数值。例如在数组中,可以直接使用下标去访问或者修改数组中的某一个元素。代码如下:
- import Foundation
- var array=["One","Two","Three","Four","Five"]
- print("访问元素:\(array[2])")
- array[2]="Third"
- print("访问修改后的元素:\(array[2])")
运行结果如下:
- 访问元素:Three
- 访问修改后的元素:Third
在Swift中,下标脚本也可以定义在类中。这样,开发者就可以像数组一样,快速访问类中的属性。本节将主要讲解类中如何使用下标脚本。
定义下标脚本
下标脚本通过subscript关键字进行定义,其定义形式如下:
- subscript(参数名称1:数据类型,参数名称2:数据类型,…) ->返回值的数据类型 {
- get {
- // 返回与参数类型匹配的类型的值
- }
- set(参数名称) {
- // 执行赋值操作
- }
- }
注意:set参数名称必须和下标脚本定义的返回值类型相同,所以不为它指定数据类型。与计算属性相同,set后面如果没有声明参数,那么就使用默认的newValue。
【示例8-18】以下将在类中定义一个下标脚本,实现通过下标脚本获取某一属性的值。代码如下:
- class NewClass{
- var english:Int=0
- var chinese:Int=0
- var math:Int=0
- //定义下标脚本
- subscript(index:Int)->Int{
- get{
- switch index{
- case 0:
- return english
- case 1:
- return chinese
- case 2:
- return math
- default:
- return 0
- }
- }
- set{
- english=newValue
- chinese=newValue
- math=newValue
- }
- }
- }
调用下标脚本
定义下标脚本后,就可以进行调用了,其调用形式如下:
- 实例对象[参数1,参数2,…]
其中,[]和它里面的内容就代表了在类中定义的下标脚本。
使用下标脚本
下标脚本可以根据传入参数的不同,分为具有一个入参参数的下标脚本和具有多个入参参数的下标脚本。以下就是对这两个下标脚本在类中的使用。
1.具有一个传入参数的下标脚本
具有一个入参参数的下标脚本是最常见的。在集合以及字符串中使用的下标就是具有一个传入参数的下标脚本。
【示例8-19】以下程序通过使用下标脚本计算3门成绩的和。代码如下:
- import Foundation
- class Score{
- var english:Int=0
- var chinese:Int=0
- var math:Int=0
- //定义下标脚本
- subscript(index:Int)->Int{
- get{
- switch index{
- case 0:
- return english
- case 1:
- return chinese
- case 2:
- return math
- default:
- return 0
- }
- }
- set{
- english=newValue
- chinese=newValue
- math=newValue
- }
- }
- }
- var myscore=Score()
- var sum:Int=0
- var i:Int=0
- //遍历
- for i=0;i<3;++i{
- sum+=myscore[i]
- }
- print(sum)
- //修改属性值
- myscore[0]=100
- myscore[1]=90
- myscore[2]=80
- //遍历求和
- for i=0;i<3;++i{
- sum+=myscore[i]
- }
- print(sum)
运行结果如下所示:
- 0
- 240
注意:下标脚本可以和计算属性一样设置为读写或只读。以上的代码是读写的形式。只读的一般语法形式如下:
- subscript(参数名称:数据类型) -> Int {
- get{
- //返回与参数匹配的Int类型的值
- }
- }
- 可以简写为以下的形式:
- subscript(参数名称:数据类型) -> Int {
- // 返回与参数匹配的Int类型的值
- }
【示例8-20】以下就使用只读的形式实现使用下标访问属性值的功能。代码如下:
- import Foundation
- class Score{
- var english:Int=50
- var chinese:Int=100
- var math:Int=30
- //定义下标脚本
- subscript(index:Int)->Int{
- switch index{
- case 0:
- return english
- case 1:
- return chinese
- case 2:
- return math
- default:
- return 0
- }
- }
- }
- var myscore=Score()
- var sum:Int=0
- var i:Int=0
- //遍历输出属性值
- for i=0;i<3;++i{
- print(myscore[i])
- }
运行结果如下所示:
- 50
- 100
- 30
2.具有多个参数的下标脚本
具有一个入参参数的下标脚本一般使用在多维维数组中。以下就是使用具有两个参数的下标为二维数组赋值。代码如下:
- import Foundation
- var value:Int=0
- class NewClass{
- var rows: Int = 0, columns: Int=0
- var grid: [Double]
- //初始化方法
- init(rows: Int, columns: Int) {
- self.rows = rows
- self.columns = columns
- grid = Array(count: rows * columns, repeatedValue: 0.0)
- }
- func indexIsValidForRow(row: Int, column: Int) -> Bool {
- return row >= 0 && row < rows && column >= 0 && column < columns
- }
- //下标脚本
- subscript(row: Int, column: Int) -> Double {
- get {
- assert(indexIsValidForRow(row, column: column), "Index out of range")
- return grid[(row * columns) + column]
- }
- set {
- assert(indexIsValidForRow(row, column: column), "Index out of range")
- grid[(row * columns) + column] = newValue
- }
- }
- }
- var matrix = NewClass(rows: 2, columns: 2)
- print("没有赋值前")
- print(matrix[0,0])
- print(matrix[0,1])
- print(matrix[1,0])
- print(matrix[1,1])
- print("赋值后")
- matrix[0,0]=1.0
- matrix[0,1]=5.6
- matrix[1,0]=2.4
- matrix[1,1]=3.2
- print(matrix[0,0])
- print(matrix[0,1])
- print(matrix[1,0])
- print(matrix[1,1])
运行结果如下所示:
- 没有赋值前
- 0.0
- 0.0
- 0.0
- 0.0
赋值后
- 1.0
- 5.6
- 2.4
- 3.2
当然,下标脚本除了可以对访问对象以及对象中的属性外,还可以实现一些自定义的功能,如以下的代码,此代码实现的功能是计算下标值和10的乘积。代码如下:
- import Foundation
- class NewClass{
- var count1: Int=10
- //定义下标脚本
- subscript(index:Int) -> Int {
- get {
- var count=index*count1
- return count
- }
- set(newvalue){
- //执行赋值操作
- count1=newvalue
- }
- }
- }
- let newClass=NewClass()
- print(newClass.count1)
- print(newClass[6])
运行结果如下:
- 10
- 60
本文选自:Swift2.0语言快速入门v3.0 大学霸内部资料,转载请注明出处,尊重技术尊重IT人!
Swift2.0语言教程之下标脚本的更多相关文章
- Swift2.0语言教程之类的嵌套与可选链接
Swift2.0语言教程之类的嵌套与可选链接 Swift2.0语言类的嵌套 在一个类中可以嵌套一个或者多个类.它们的嵌套形式也是不同的,大致分为了两种:直接嵌套和多次嵌套.下面依次讲解这两种方式. S ...
- Swift2.0语言教程之类的属性
Swift2.0语言教程之类的属性 类 虽然函数可以简化代码,但是当一个程序中出现成百上千的函数和变量时,代码还是会显得很混乱.为此,人们又引入了新的类型——类.它是人们构建代码所用的一种通用.灵活的 ...
- Swift2.0语言教程之函数嵌套调用形式
Swift2.0语言教程之函数嵌套调用形式 Swift2.0语言函数嵌套调用形式 在Swift中,在函数中还能够调用函数,从而形成嵌套调用.嵌套调用的形式往往有两种:一种是在一个函数中调用其它函数:还 ...
- Swift2.0语言教程之类的方法
Swift2.0语言教程之类的方法 Swift2.0语言的方法 方法其实就是函数,只不过它被定义在了类中.在Swift中,根据被使用的方式不同,方法分为了实例方法和类型方法两种.这两种方法的定义也和O ...
- Swift2.0语言教程之闭包
Swift2.0语言教程之闭包 Swift2.0语言闭包 闭包是自包含的函数代码块,可以在代码中被传递和使用.Swift中的闭包与C和Objective-C中的代码块(blocks)以及其他一些编程语 ...
- Swift2.0语言教程之函数的返回值与函数类型
Swift2.0语言教程之函数的返回值与函数类型 Swift2.0中函数的返回值 根据是否具有返回值,函数可以分为无返回值函数和有返回值函数.以下将会对这两种函数类型进行讲解. Swift2.0中具有 ...
- Swift3.0语言教程组合字符串
Swift3.0语言教程组合字符串 Swift3.0语言教程组合字符串,当开发者想要将已经存在的字符串进行组合,形成一个新的字符串,可以使用NSString中的两个方法,分别为appending(_: ...
- Swift3.0语言教程获取字符
Swift3.0语言教程获取字符 Swift3.0语言教程获取字符,在字符串中获取某一下标位置(下标索引)处的字符是很常见的功能,在NSString中使用character(at:)方法实现,其语法形 ...
- Swift3.0语言教程字符串与URL的数据转换与自由转换
Swift3.0语言教程字符串与URL的数据转换与自由转换 Swift3.0语言教程字符串与URL的数据转换 Swift3.0语言教程字符串与URL的数据转换与自由转换,字符串中的字符永久保存除了可以 ...
随机推荐
- 20155207 2016-2017-2 《Java程序设计》第七周学习总结
20155207 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 第13章 时间与日期 13.1 认识时间与日期 13.1.1 时间的度量 格林威治时间(GM ...
- HDU 1242 Rescue (广搜)
题目链接 Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The priso ...
- Django-数据库增查
1/ python manage.py shell ---------一般用于调试操作 2/ 建表--定义类 #产品表 class ProductModel(models.Model): #通过类属性 ...
- Oracle 11.2.0.4在线(Online mode)打补丁14084247解决WRH$_ACTIVE_SESSION_HISTORY不会自动切割的问题
安装了Oracle Database Release 11.2.0.4之后,发现WRH$_ACTIVE_SESSION_HISTORY始终不会自动分割删除, 后来才发现需要应用补丁:14084 ...
- elasticsearch6.5集群环境搭建的一些坑
都说el配置很简单,确实比solr简单多了,不用手动配置一大堆,不过第一次配置也不轻松,因为马虎老是漏掉了许多地方 配置一个半小时才启动成功: 这里主要记录一下一些遇到的坑: 一 不能用root启动, ...
- 转载-SVN常用命令
SVN(Subversion)是一个自由.开源的项目源代码版本控制工具.目前,绝大多数开源软件和企业代码管理,都使用SVN作为代码版本管理软件. Subversion将文件存放在中心版本库里,这个版本 ...
- C#中HttpWebRequest的GetRequestStream执行的效率太低,甚至偶尔死掉
为了提高httpwebrequest的执行效率,查到了一些如下设置 request.ServicePoint.Expect100Continue = false; request.ServicePoi ...
- if(a==1) & if(1==a) 区别
[前提] 在公司参加项目时,看到前辈写if比较数值是否相等,经常会写 if(1==a) ,觉得有些奇怪,如是乎,将调查结果写下来记录一下. [结果] if(a==1) 与 if(1==a)是没有什么区 ...
- 如何成为技术大牛——阿里CodeLife
天天写业务代码的程序员,怎么成为技术大牛,开始写技术代码? 几个误区 跟着大牛,就可以成为大牛.首先,大牛时间很宝贵,不可能花很多时间去指导你:其次,简单的模仿大牛,只能学到表面知识,不可能成为大牛: ...
- java 判断字符串是否相等
判断字符串相等我们经常习惯性的写上if(str1==str2),这种写法在Java中可能会带来问题. java中判断字符串是否相等有两种方法: 1.用“==”运算符,该运算符表示指向字符串的引用是否相 ...