IOS Swift 3.1字符串截取

以前一直是做Java或者C#相关,后面用Swift做IOS开发时,才发现字符串的截取等等完全不一样。特别是Swift升级到3.x之后,与之前又有很大差异。

首先我们看一下截取的方法:

func substring(from: String.Index)
func substring(to: String.Index)
func substring(with: Range)

然后我们会直接蒙圈,完全不知道该怎么使用。

仔细看一下,我们会发现字符串有startIndex和endIndex,分别用于标志起始和终点的位置。

那么,我们就可以利用这两个位置信息做偏移,来得到我们需要的字符串,例如:

var str = "Hello World!"
let startIndex = str.index(str.startIndex, offsetBy: 5)
let endIndex = str.index(str.endIndex,offsetBy: -2)
let result = str.substring(with: startIndex..<endIndex)

上面就是很简单的根据位置的偏移来计算最终需要截取的字符串。

同样的,我们可以使用rangeOf来查找某个字符串的位置,然后进行偏移操作,例如:

let rangIndex = str.range(of: "World")
let endIndex = rangIndex!.lowerBound
let startIndex = str.index(endIndex, offsetBy: -4)
let result = str.substring(with: startIndex..<endIndex)

如上所示,也都是Swift字符串截取的很常用的部分。

运行效果如下:

当然,其实我个人不建议使用Swift的截取操作,根据我做阅读器中进行章节分页来看,Swift 3.1中使用截取操作非常的慢,基本在我解析一本小说有时候甚至需要十几秒,操作时间太久。

但是当我使用Objective-C封装了字符串截取操作再提供给Swift使用,基本都在几秒之内能解析完。

一个简单的Objective-C截取操作如下所示:

+(NSString *)subString:(NSString *)content startIndex:(int)startIndex length:(int)length {
    NSString* result = [content substringWithRange:NSMakeRange(startIndex, length)];
    return result;
}

我们可以很简单的提供给Swift使用。

所以我个人还是建议使用Objective-C的截取方法,至少我当前使用情况来看,运行速度比Swift快了不知道多少倍。


最近有一两周没写博客了,主要是当前公司里的工业4.0项目事情太多,另外还有一个VR眼镜的案子,有点忙不过来。

而且本人在沪江上报了个日语0~N2的学习班,虽然以前自学过一部分,但还是想报个班系统的学习一下,课程一直到明年7月份,希望自己能坚持下来。

发表评论

电子邮件地址不会被公开。