Swift 中的Range和NSRange不同

Swift中的Ranges和Objective-C中的NSRange有很大的不同,我发现在处理Swift中Ranges相关的问题的时候,总是要花费比我想象的更多的时间。不过,现在回过头来看看,发现Swift中的Ranges的使用还是比较合理的,但是想要正确的使用Ranges真的需要一些特别的技巧。

看一个例子,下面这段代码展示的是截取以指定的字符开头和以指定的字符结尾的子字符串:

?
1
2
3
4
5
6
var str =  "Hello, playground"
  
let rangeOfHello = Range(start: str.startIndex,
                          end: advance(str.startIndex, 5))
let helloStr = str.substringWithRange(rangeOfHello)
helloStr  //"Hello"

 

你可以看到,不能通过指定开始结束的Int值来获取Range,需要使用String类的startIndexendIndex属性(String.startIndex的类型不是Int),这就是Swift Ranges特别的地方。

若想获取一个超出startIndex范围的Range,你可以使用上述代码里用到的advance的函数。advance也可以用于从结尾开始计算,所以如果你需要相对于endIndex获取index,像下面的代码一样,使用一个负数即可:

?
1
2
3
4
5
6
let dob =  "01/01/2000"
  
let rangeOfYear = Range(start: (advance(dob.endIndex, -4)),
                         end: dob.endIndex)
let yearStr = dob.substringWithRange(rangeOfYear)
yearStr  // "2000"

 

不得不说,细细思量,Swift对于Ranges的使用十分干净和优雅,只要你熟悉了它的用法。

转载于:https://www.cnblogs.com/motoyang/p/4850443.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值