NSString跟SwiftString的区别和使用场景
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSString跟SwiftString的区别和使用场景相关的知识,希望对你有一定的参考价值。
首先说下共同点,就是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.hnnedu.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的功能。 参考技术A 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衔接了。 参考技术B Swift 提供了三种方式来比较字符串的值:字符串相等、前缀相等和后缀相等。 1,字符串相等 如果两个字符串以同一顺序包含完全相同的字符,则认为两者字符串相等: let quotation = "我们是一样一样滴." let sameQuotation = "我们是一样一样滴."...本回答被提问者采纳
以上是关于NSString跟SwiftString的区别和使用场景的主要内容,如果未能解决你的问题,请参考以下文章
答:SQLServer DBA 三十问之一: charvarcharnvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使