下标脚本
subscript
可以使用在类,结构体,枚举中
提供一种类似于数组或者字典通过下标来访问对象的方式
subscript可以重载,就是一个类可以定义多个下标脚本
可以设置为只读和读写
一、语法
参数不可以是inout类型参数,且参数不能有默认值
二、举例
例子一
简单的通过下标脚本访问属性
解释下为什么要返回Any?
因为在使用的过程当中,有可能会下标越界,例子一采用返回nil的方式,因为返回类型有可能为nil,并且类型不确定
,所以返回Any?用户可以在使用的过程中判断是否取到了值。
当然也可以采用断言的方式提醒越界
例子二
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)