Swift3升级到Swift4后String的API升级



苹果的swiftAPI更新很快,现在已经升级到swift4,在我做API适配的时候发现Swift4对String的操作简化了很多,所以写一篇文章总结一下,希望能够帮助到有需要的人。

在Swift4之前使用String的字符集需要使用String.characters来获取,如代码

  1. var str1 = "What are doing?"
  2. //Swift3
  3. for c in str1.characters {
  4. print(c)
  5. }
  6. //swift4
  7. for c in str1 {
  8. print(c)
  9. }
  10. //通过两种版本代码对比发现Swift4比Swift3代码简洁的多。


Swift3获取字符串的字符数(长度)是String.characters.count,在Swift4中直接String.count就行了,代码对比如下

//Swift3
let length = str1.characters.count

//Swift4
let length = str1.count

当然如果想要获取特定字符集的长度还是可以用到下面这种写法
let length = str.utf8.count


当然在swift4之后字符串截取的api变化也很大,之前的截取方法都被废弃掉了,下面我们使用代码来说明。

  1. let template = "<<<Hello>>>"
  2. let indexStartOfText = template.index(template.startIndex, offsetBy: 3)
  3. let indexEndOfText = template.index(template.endIndex, offsetBy: -3)
  4. // Swift4的写法
  5. let substring1 = template[indexStartOfText...] // "Hello>>>"
  6. // Swift3的接口已经被废弃,代码如下
  7. // let substring1 = template.substring(from: indexStartOfText)
  8. ///截取到某个位置
  9. // Swift4
  10. let substring2 = template[..<indexEndOfText] // "<<<Hello"
  11. // Swift3的接口已被废弃
  12. // let substring2 = template.substring(to: indexEndOfText)
  13. //截取到某个区间
  14. / Swift4
  15. let substring3 = template[indexStartOfText..<indexEndOfText] // "Hello"
  16. // Swift3的接口在swift4中已被废弃
  17. // let substring3 = template.substring(with: indexStartOfText..<indexEndOfText)
  18. //在最后把截取得到的字符串需要转换回String
  19. let strNew = String(subString)

如果还是习惯以前subString的写法也可以像下边这样写

  1. let digits = "0123456789"
  2. let index4 = digits.index(digits.startIndex, offsetBy: 4)
  3. // The first of each of these examples is preferred
  4. digits[...index4] // "01234"
  5. digits.prefix(through: index4)
  6. digits[..<index4] // "0123"
  7. digits.prefix(upTo: index4)
  8. digits[index4...] // "456789"
  9. digits.suffix(from: index4)
  10. //在写截取区间值的时候一定注意开区间和闭区间的事情,他们最后得到的结果不同

查看原文:https://www.liuandy.cn/ios/2017/12/27/2170.html


0