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可以通过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的功能。