Swift入门(十二)——利用Extension添加逆序输出字符串方法
Swift好像没有自带逆序输出字符串的方法,于是决定通过拓展(Extension)给String类添加一个逆序输出字符串的reverse方法。 首先新建一个Swift文件,命名规则不太清楚,于是暂且模仿OC叫做String+Operation吧,然后实现我们需要拓展的方法。下面先贴上代码,然后解释一下这段代码。 //String+Operation.swifft
import Foundation
//逆序输出swift中的字符串
extension String{
func Reverse() -> String{
var returnString: String = ""
for (var i = count(self) - 1; i >= 0; --i) {
returnString.append(self[advance(self.startIndex,i)]) } return returnString } }
由于Swift中的String,是可拓展字母集的集合,所以苹果不建议我们直接通过整数下标对其进行操作,因为这可能会往原本要构成一个完整单词的若个Unicode标量中插入数据。
所以想要遍历String,可以用String的index来处理。首先看一下源码: struct Index : BidirectionalIndexType,Comparable,Reflectable {
func successor() -> String.Index
func predecessor() -> String.Index
func getMirror() -> MirrorType
}
subscript (i: String.Index) -> Character { get }
可以发现,String定义了附属脚本,传入的参数是一个String.Index类型的变量,而这个Index是在swift中定义了的结构体,有successor和predecessor等方法。 而advance方法第一个参数表示其实index,第二个参数的偏移量。通过 self[advance(self.startIndex,i)]
这句代码其实就变相的利用下标来遍历字符串了,取出的Character类型的元素,这时候只要调用append方法即可。 拓展(Extension)的使用也很简单: var s: String = "hello world"
println(s.Reverse())
// 输出结果是 dlrow olleh
如果完全使用index而不涉及下标也是可以的,比如下面这段代码可以顺序遍历String: for (var index = self.startIndex; index != self.endIndex; index = index.successor()){ returnString.append(self[index]) }
但是这种方式不适合逆向遍历字符串,因为可以看到self[self.startIndex]读取的是字符串的第一个character,但不能使用self[self.endIndex],否则会出越界错误。因此如果用这种方式尝试逆序遍历字符串,会比较麻烦。还是推荐使用第一种。 查看完整专栏——《Swift轻松入门》【Swift入门(一)——基本语法】 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |