Swift入门教程10-subscript下标脚本

下标脚本
subscript

可以使用在类,结构体,枚举中
提供一种类似于数组或者字典通过下标来访问对象的方式

subscript可以重载,就是一个类可以定义多个下标脚本
可以设置为只读和读写
一、语法
参数不可以是inout类型参数,且参数不能有默认值
subscript(参数1,参数2...)->返回值{
	get{
	}
	set(newValue){
	}
}

二、举例
例子一 

简单的通过下标脚本访问属性
struct CSDN{
	var ID:Int = 123456
	var name:String = "hello_hwc"
	subscript(index:Int)->Any?{
		switch(index){
			case 0:return ID
			case 1:return String
			default:return nil
			//default:assert("Index out of range")
		}
	}
}
var instance = CSDN()
if let temp = instance[2]{
	println("success")
}

解释下为什么要返回Any?
因为在使用的过程当中,有可能会下标越界,例子一采用返回nil的方式,因为返回类型有可能为nil,并且类型不确定
,所以返回Any?用户可以在使用的过程中判断是否取到了值。
当然也可以采用断言的方式提醒越界

例子二

我们来做一个复杂的例子,通过扩展String来通过下标的方式获得子字符串,同时提供几个substring的方法

extension String {
    subscript (r: Range<Int>) -> String {
        get {
            let subStart = advance(self.startIndex, r.startIndex, self.endIndex)
            let subEnd = advance(subStart, r.endIndex - r.startIndex, self.endIndex)
            return self.substringWithRange(Range(start: subStart, end: subEnd))
        }
    }
    func substring(from: Int) -> String {
        let end = countElements(self)
        return self[from..<end]
    }
    func substring(from: Int, length: Int) -> String {
        let end = from + length
        return self[from..<end]
    }
    func substring(from:Int, to:Int) ->String
    {
        return self[from..<to]
    }
}
var str = "hello world"
var str1 = str.substring(6)
var str2 = str.substring(0,to:5)
var str3 = str.substring(0,length:5)

你可能感兴趣的:(swift,subscript,下标脚本)