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

  • 相关阅读:
    TWaver网元动态转动效果
    替换TWaver中Tree展开合并图标
    MOSS 2010:Visual Studio 2010开发体验(10)——列表开发之内容类型
    MOSS 2010:Visual Studio 2010开发体验(8)——Silverlight应用
    MOSS 2010:Visual Studio 2010开发体验(13)——列表开发之列表实例
    MOSS 2010:Visual Studio 2010开发体验(5)——Mapped Folder
    MOSS 2010:Visual Studio 2010开发体验(6)——开发WebPart
    MOSS 2010:Visual Studio 2010开发体验(7)——AJAX Web Part
    MOSS 2010:Visual Studio 2010开发体验(11)——扩展SharePoint Explorer
    MOSS 2010:Visual Studio 2010开发体验(12)——列表开发之列表定义
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6721962.html
Copyright © 2020-2023  润新知