
我们定义一个字符串:
var str = "abcdefgh"
然后我们想获得第三个字符, 也就是索引为2的字符,我们想可不可以用 str[2] 获得?
我们向获得其中一段字符, 想是否可以用str[1...3] 获得?
默认情况是字符串是不能这样做下标操作的 , 但是我可以扩展一下String,让它支持下标操作:
extension String {
subscript (r: Range<Int>) -> String {
get {
return self[Range(start: advance(self.startIndex, r.startIndex), end: advance(startIndex, r.endIndex - r.startIndex))]
}
set {
self.replaceRange(Range(start: advance(self.startIndex, r.startIndex),end:advance(startIndex, r.endIndex - r.startIndex)), with: newValue);
}
}
subscript(index:Int)->String{
get{
return self[Range(start:index,end:index+1)];
}
set{
self[Range(start:index,end:index+1)]=newValue;
}
}
subscript(start:Int,length:Int)->String{
get{
return self[Range(start:start,end:start+length+1)]
}
set{
self[Range(start:start,end:start+length+1)]=newValue;
}
}
}
上面代码是将 Range<Int> 类型转会为 Range<String.index> 后再对字符做下标操作。
转换的原理是用 advance函数把Int转换为String.index类型。
那么大家知道怎么把String.index 类型转换为 Int 类型吗?
大家先自己试一试。
微博关注luofei614,并私信输入 1001 , 我将告诉你答案。
「GetParty」
关注微信号,推送好文章
微信中长按图片即可关注