问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

NSString和SwiftString的区别和使用场景

发布网友 发布时间:2023-03-13 20:16

我来回答

1个回答

热心网友 时间:2023-10-21 16:13

首先说下共同点,就是String保留了大部分NSString的api比如
.hasPrefix
.lowercaseString
.componentsSeparatedByString
.substringWithRange 等等
所以很多常规操作在开发中使用两者之一都是可以的,下面说下区别。

NSString是引用类型。SwiftString是值类型。
var nsString:NSString = NSString()
var swiftString:String = String()

var nsString:NSString = "dsx"
var swiftString:String = "dsx"
两者都可以使用自己的类名来直接进行初始化,下面的方法也是初始化,虽然写法相同,但是NSString的意思是初始化了一个指针指向了这个字符串,但SwiftString的意思则是把字符串字面量赋值给变量。

SwiftString字符串之间的拼接比NSString方便
NSString需要用append或者stringWithFormat将两个字符串拼接
NSString *strA = @"My name";
NSString *strB = @" is dsx";
strA = [strA stringByAppendingString:strB];
而SwiftString只需要用 “+” 即可
var strA = "My name"
var strB = " is dsx"
strA = "My name" + " is dsx"
strA = strA + strB
println(strA)
在swift最开始的语法是允许字符串和字符之间 直接使用 “+” 拼接的,但是swift1.2以后就不能这么做了,字符串与字符直接只能用append衔接了。

SwiftString 可以实现字符串遍历
SwiftString 可以实现遍历输出一个字符串内部的所有字符,这是NSString所做不到的,因为前者继承了CollectionType协议(swift2后不再继承此协议,改成通过一个characters属性来提供一个字符的集合)
// swift1.2
for charater in "My name is dsx" {
println(charater)
}

// swift2.0
for character in "My name is dsx".characters {
print(character)
}
swift的字符串更像是多个字符元素组合而成有序列的一个产物,像但不是集合类;如果把上面的“This is a book” 后面加上 as NSString 则会报如下错误:
Type 'NSString' does not conform to protocol 'SequenceType'
在swift2.0以后写as String 也会报上面错误,2.0将原来String继承的SequenceType和CollectionType协议都下沉到了String.CharacterView来继承,感觉苹果这么做的目的是为了减少资源浪费。

SwiftString计算字符串长度的方法与NSString不同
var strA:String = "mc梦"
var strB:NSString = "mc梦"
print(strA.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)) // 5
print(strA.characters.count)) // 3
print(strB.length); // 3
NSString直接使用 字符串.length 就可以获得字符串的长度,但是String敲.length只能敲出 .lengthOfBytesUsingEncoding(NSUTF8StringEncoding) 这么算汉字的存储空间就是英文的3倍。 swift真正的类似于.lengh的方法就是取出characters属性(数组)然后.count

SwiftString比较字符串相等的方式与NSString不同
let strA:NSString = ""
let strB:NSString = ""
let strC:NSString = "dsx"
let strD:NSString = "dsx"

if(strA.isEqualToString(strB as String)){
print("yes");
}

if (strC == strD){
print("yes");
}
NSString 有一个方法isEqualToString 方法用来判断两个字符串是否完全相等,String没有这个方法,但是因为String是值类型所以可以直接用 == 判断是否完全相等。

NSString可以同基本数据类型见转化
var strA:NSString = "12306"
var strB:NSString = "0.618"

var numOfInt = strA.integerValue;
var numOfDouble = strB www.hnne.com .doubleValue;
这个功能Swift没有,所以在json解析或字典转模型时可能会使用NSString比较方便。

SwiftString可以通过isEmpty属性来判断该字符串是否为空
var emptyStr = ""
if emptyStr.isEmpty {
print("It is empty")
}
这个也是swiftString独有的一个属性。(董铂然)一般NSString想判断字符串是否为空都是需要看.length是否>0。 判断NSString == nil 这个方法现在已经不让用了,会报错
Binary operator '==' cannot be applied to operands of type 'NSString' and 'NilLiteralConvertible'

SwiftString独有的字符串插入字符功能
var strA:String = "My name is dx"
strA.insert("s", atIndex: strA.characters.indexOf("x")!);
print(strA) // My name is dsx
这个方法仅仅可以插入单个字符不能插字符串,如果里面写成"ss" 就会报错 Cannot convert value of type 'String' to expected argument type 'Character'
如果你不是在董铂然博客园看到本文,请点击查看原文。
NSString是一个指针不能进行此操作。并且String也拥有NSString的subStringFromIndex 或 ToIndex的功能。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 23接灶神把锅上的塑料盘子烧没了是不是有不好的事要发生了 走著走著天上突然降落下一泡鸟屎,请问这是不是代表著不好的事情要发生?怎麽样才能化解呢? 晚上把玻璃杯打碎了,这意味什么啊?会不会有不好的事情发生! 泾渭分明是指哪两条河流 渭河为什么比泾河清澈 祭奠的仪式叫什么,有区别吗? 母亲去世后如何祭奠? 什么叫统一战线? 小天鹅空调为什么只制冷 《礼记·曾子问》中葬引至于堩一段作何解释?老子对礼究竟持什么态度? 东阳东白山水库可以钓鱼吗 东阳石马坑水库可以钓鱼吗? 东阳哪里可以抽鲢鳙 无敌剑域三部曲讲了个什么故事 difficult的翻译是什么? difficult的英语 暗渡陈仓什么意思?近义词和反义词是什么? 电池耗电太快换一个原装的多少钱? 鳤的介绍 可以用支付现金方式取代缴社保吗? 大兴社保局能交现金吗 Swift中json转model报No value associated with key CodingKeys Swift 字典转换为JSONString JSONString转换为字典 荣耀60se小屏播放抖音时有时无怎么回事 蜀可以加哪些偏旁?(躅除外)急啊,谢谢,两三个有没有? 哥和骨的意思 骨的偏旁和结构是什么 烟酰胺感光吗,烟酰胺能见光吗 烟酰胺需要避光吗,烟酰胺要避光吗 不小心用了含酸,烟酰胺成份的护肤品照了光,还过度使用了UTP该如何修复呢[笑哭 红糖发糕加玉米淀粉起到什么作用 发糕要不要放玉米淀粉 高度动辄是什么意思,最后一个字标准的读音是什么,谢谢? 湣读音是什么 胰腺癌食谱大全:家人得了晚期胰腺癌,没做放化疗,希望你们提供一些食谱抑制癌细胞扩散,也好减轻病人的 查宫颈癌什么时间查合适,需要检查哪些项目 医院病假证明丢了怎么办 出生医学证明丢了能补办吗 京东手机号注销了被别人用了 微信公众账号图文消息怎样加音乐 学了天天跟领导汇报的做法,为啥没多久领导就嫌烦了? 怕领导烦,有没有必要经常向领导汇报工作,为什么? 学习通考试可以用火星搜题吗?