swift_022(Swift 的下标脚本)

//***********swift学习之22--下标脚本--***************************


// 就是说用下标脚本访问一个数组(Array)实例中的元素可以这样写 someArray[index] ,访问字典(Dictionary)实例中的元素可以这样写 someDictionary[key]

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

/*

 语法类似于实例方法和计算型属性的gettersetter的混合。

 与定义实例方法类似,定义下标脚本使用subscript关键字,显式声明入参(一个或多个)和返回类型。

 与实例方法不同的是下标脚本可以设定为读写或只读。这种方式又有点像计算型属性的gettersetter

 */



// 实例 1


struct subexample {

    let decrementer: Int

    subscript(index: Int) -> Int {

        return decrementer / index

    }

}

let divModel = subexample(decrementer: 100)


print("100 除以 9 等于 \(divModel[9])")

print("100 除以 2 等于 \(divModel[2])")




class daysofaweek {

    private var days = ["Sunday", "Monday", "Tuesday", "Wednesday",

                        "Thursday", "Friday", "saturday"]

    subscript(index: Int) -> String {

        get {

            return days[index]   // 声明下标脚本的值

        }

        set(newValue) {

            self.days[index] = newValue   // 执行赋值操作

        }

    }

}

var p = daysofaweek()


print(p[0])

print(p[1])



/*

 下标脚本选项

 下标脚本允许任意数量的入参索引,并且每个入参类型也没有限制。

 下标脚本的返回值也可以是任何类型。

 下标脚本可以使用变量参数和可变参数。

 一个类或结构体可以根据自身需要提供多个下标脚本实现,在定义下标脚本时通过传入参数的类型进行区分,使用下标脚本时会自动匹配合适的下标脚本实现运行,这就是下标脚本的重载。

 

 总之就是可以自定义下标类型,下标类型决定你的集合类型。

 */


struct Matrix {

    let rows: Int, columns: Int

    var print: [Double]

    init(rows: Int, columns: Int) {

        self.rows = rows

        self.columns = columns

        print = Array(repeating: 0.0, count: rows * columns)

    }

    

    

    // 脚本实现存取

    subscript(row: Int, column: Int) -> Double {

        get {

            return print[(row * columns) + column]

        }

        set {

            print[(row * columns) + column] = newValue

        }

    }

}

// 创建了一个新的 3 3 列的Matrix实例

var mat = Matrix(rows: 3, columns: 3)


// 通过下标脚本设置值

mat[0,0] = 1.0

mat[0,1] = 2.0

mat[0,2] = 3.0

mat[1,0] = 4.0

mat[1,1] = 5.0

mat[1,2] = 6.0


// 通过下标脚本获取值

print("\(mat[0,0])")

print("\(mat[0,1])")

print("\(mat[1,0])")

print("\(mat[1,1])")

print("\(mat[0,2])")

print("\(mat[1,2])")


/*

 Matrix 结构体提供了一个两个传入参数的构造方法,两个参数分别是rowscolumns,创建了一个足够容纳rows * columns个数的Double类型数组。为了存储,将数组的大小和数组每个元素初始值0.0

 你可以通过传入合适的rowcolumn的数量来构造一个新的Matrix实例。

 */






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值