Swift中String和NSString的一个不同之处

Swift中String和NSString的一个不同之处,第1张

概述我们知道在Swift中String和NSString是可以互相转换使用的…额…应该是在绝大数情况下可以互相转换使用.在某些情况下可能还有一丝丝略微的差别:比如在涉及到处理字符串中字符索引的时候. 我们首先来看一下NSString的字符串替换功能: let string = "ABCDE"let range = Range(uncheckedBounds: (1,4))let nsRange

我们知道在Swift中String和Nsstring是可以互相转换使用的…额…应该是在绝大数情况下可以互相转换使用.在某些情况下可能还有一丝丝略微的差别:比如在涉及到处理字符串中字符索引的时候.

我们首先来看一下Nsstring的字符串替换功能:

let string = "ABCDE"let range = Range(uncheckedBounds: (1,4))let nsRange = NSRange(range)let str:Nsstring = Nsstring(string: string)str.replacingCharacters(in: nsRange,with: "AAAA")

以上代码有几点需要注意:

我没有直接使用Nsstring和NSRange,它们都是由String和Range转换而来,为什么?因为这里有坑啊!稍后马上会说明. Range的初始化器里的参数是一个tuple,所以额外有一层括号,如果你直接传2个参数进去就会出错了.

各位来猜一下上面的代码最后一句的结果是神马!?如果你认为是”AAAAA”,那么恭喜你,猜错了!!!实际的结果是”AAAAAE”.你没看错!

你实际生成的Range为(1..<4)其中只有3个空间,即为BCD3个字符,你需要替换为”AAAA”,所以最后的结果为”AAAAAE”,如果你想结果为”AAAAA”,你只需要第二句改为:

let range = Range(uncheckedBounds: (1,5))

即可.你也可以直接创建NSRange:

let nsRange = NSMakeRange(1,4)

这样创建的是我们所需要的结果.

下面我们看一下上面相同的功能在String里又该如何写呢?

我们先尝试一下:

let string = "ABCDE"let range = Range(uncheckedBounds: (1,4))string.replacingCharacters(in: range,with: "AAAA")

不出意外,编译器抱怨了!正如小琥那首歌—没.那.么.简.单…

看一下错误信息,原来两种范围类型不可以互相转换的,正确的写法如下:

let IDx1 = string.characters.index(after: string.startIndex)let IDxrange = IDx1..<string.characters.index(IDx1,offsetBy: 4)string.replacingCharacters(in: IDxrange,with: "AAAA")

超复杂的,有木有… ;)

原来低版本Swift中的startIndex.successor()和advance()方法都以废弃,所以在Swift3.0中你只有按如上方式来写了.最后把老版本Swift中的写法贴出来:

let string = "ABCDE"let nsRange = NSMakeRange(1,4)string.stringByReplacingCharactersInRange(nsRange,withString: "AAAA")let indexpositionOne = string.startIndex.successor()let swiftRange = indexpositionOne..<advance(indexpositionOne,4) string.stringByReplacingCharactersInRange(swiftRange,withString: "AAAA")

注意:以上代码不能用在Swift3.0中!

总结

以上是内存溢出为你收集整理的Swift中String和NSString的一个不同之处全部内容,希望文章能够帮你解决Swift中String和NSString的一个不同之处所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1071475.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存