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中,下标脚本也能够定义在类中。这样。开发人员就能够像数组一样。高速訪问类中的属性。本节将主要解说类中怎样使用下标脚本。

定义下标脚本

下标脚本通过subscriptkeyword进行定义。其定义形式例如以下:

  • 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人!

时间: 2025-01-12 19:07:12

Swift2.0语言教程之下标脚本的相关文章

Swift2.0语言教程之类的嵌套与可选链接

Swift2.0语言教程之类的嵌套与可选链接 Swift2.0语言类的嵌套 在一个类中可以嵌套一个或者多个类.它们的嵌套形式也是不同的,大致分为了两种:直接嵌套和多次嵌套.下面依次讲解这两种方式. Swift2.0语言的直接嵌套 当一个类或者多个类直接嵌套在另外一个类,这时就构成直接嵌套,如图8.6所示. 图8.6  类的嵌套 在图8.6中,类2.类3和类4都是直接嵌套在类1中.对于这种情况,使用类1的实例属性和方法,语法形式如下: 类1().属性 类1().方法 使用类1的类型属性和方法的形式

Swift2.0语言教程之类的属性

Swift2.0语言教程之类的属性 类 虽然函数可以简化代码,但是当一个程序中出现成百上千的函数和变量时,代码还是会显得很混乱.为此,人们又引入了新的类型--类.它是人们构建代码所用的一种通用.灵活的构造方式.本章将主要详细讲解类的使用. Swift2.0语言的类与对象 类是一种新的数据类型,类似于生活中犬类.猫类等等.而对象则是将这个抽象的类进行了具体化.例如,在犬类中,有哈士奇,金毛等等,这些就是犬类的具体化,即对象.本节将讲解类的创建以及如何将类进行具体化(即实例化)为对象. Swift2

Swift2.0语言教程之函数嵌套调用形式

Swift2.0语言教程之函数嵌套调用形式 Swift2.0语言函数嵌套调用形式 在Swift中,在函数中还可以调用函数,从而形成嵌套调用.嵌套调用的形式往往有两种:一种是在一个函数中调用其他函数:另一种是在一个函数中调用自身函数.以下将对这两种调用进行详细讲解. Swift2.0语言嵌套调用基本形式 嵌套调用是指在函数中可以调用其他函数.调用方式如图7.4所示.   图7.4  函数嵌套的形式 [示例7-25]以下将使用函数的嵌套调用实现对s = 22! + 32!的计算.代码如下: impo

Swift2.0语言教程之类的方法

Swift2.0语言教程之类的方法 Swift2.0语言的方法 方法其实就是函数,只不过它被定义在了类中.在Swift中,根据被使用的方式不同,方法分为了实例方法和类型方法两种.这两种方法的定义也和Objective-C是不同的.本节依次讲解这两种方法. Swift2.0语言的实例方法 实例方法被定义在类中,但是由类的实例调用.所以,这类方法被称为实例方法.实例方法和函数一样,分为了不带参数和带参数两种.以下依次讲解这两种方法的使用. 1.不带参数的实例方法 不带参数的实例方法定义和函数的是一样

Swift2.0语言教程之函数的返回值与函数类型

Swift2.0语言教程之函数的返回值与函数类型 Swift2.0中函数的返回值 根据是否具有返回值,函数可以分为无返回值函数和有返回值函数.以下将会对这两种函数类型进行讲解. Swift2.0中具有一个返回值的函数 开发者希望在函数中返回某一数据类型的值,必须要在函数声明定义时为函数设定一个返回的数据类型,并使用return语句进行返回.其中,return语句的一般表示形式如下: return 表达式 其中,表达式可以是符合Swift标准的任意表达式.而具有返回值的函数声明定义形式如下: fu

Swift2.0语言教程之闭包

Swift2.0语言教程之闭包 Swift2.0语言闭包 闭包是自包含的函数代码块,可以在代码中被传递和使用.Swift中的闭包与C和Objective-C中的代码块(blocks)以及其他一些编程语言中的Lambda函数比较相似.在本章中所讲的函数其实就是特殊的闭包.本节主要讲解关于闭包的基本使用. Swift2.0语言闭包表达式 闭包表达式是一种利用简洁语法构建内联(内联类似与C语言中的宏定义)闭包的方式.以下这个代码是对两个字符串的比较. import Foundation //判断两个字

Swift3.0语言教程获取C字符串

Swift3.0语言教程获取C字符串 Swift3.0语言教程获取C字符串,为了让Swift和C语言可以实现很好的交互,开发者可以使用NSString的cString(using:)方法在指定编码格式后,获取C字符串,其语法形式如下: func cString(using: UInt) 其中,using用来指定编码格式. [示例1-19]以下将使用cString(using:)方法获取C字符串. import Foundation var str1=NSString(string:"Hello&

swift2.0中文版教程

有些同学问我要swift的中文版教程,为了节省大家的找资料的时间,我就把我网上下载的PDF放到这里共享好了. 点击链接或者右击选择下载文件进行下载:swift2.0中文版教程 在此也感谢翻译者们的贡献!

Swift3.0语言教程获取字符串编码与哈希地址

Swift3.0语言教程获取字符串编码与哈希地址 Swift3.0语言教程获取字符串编码与哈希地址,以下将讲解字符串中其它内容的获取方法. 1.获取字符串编码 在NSString中可以使用2个属性获取字符串编码,分别为availableStringEncodings属性和defaultCStringEncoding属性. (1)availableStringEncodings属性可以用来获取NSString可用的字符串编码.其语法形式如下: class var availableStringEn