Swift
的String
和Character
类型提供了快速和兼容 Unicode 的方式供你的代码使用。创建和操作字符串的语法与 C
语言中字符串操作相似,轻量并且易读。 字符串连接操作只需要简单地通过+
符号将两个字符串相连即可。与 Swift
中其他值一样,能否更改字符串的值,取决于其被定义为常量还是变量。
注意:
Swift
的String
类型与Foundation
NSString
类进行了无缝桥接。Foundation
也可以对String
进行扩展,暴露在NSString
中定义的方法。 这意味着,如果你在String
中调用这些NSString
的方法,将不用进行转换。
更多关于在Foundation
和Cocoa
中使用String
的信息请查看 Using Swift with Cocoa and Objective-C (Swift 3.0.1)。
初始化空字符串
var emptyString = "" // 空字符串字面量
var anotherEmptyString = String() // 初始化方法
// 两个字符串均为空并等价。
您可以通过检查其Bool
类型的isEmpty
属性来判断该字符串是否为空:
if emptyString.isEmpty {
print("Nothing to see here")
}
// 打印输出:"Nothing to see here"
字符串可变性
var variableString = "Horse"
variableString += " and carriage"
// variableString 现在为 "Horse and carriage"
let constantString = "Highlander"
constantString += " and another Highlander"
// 这会报告一个编译错误 (compile-time error) - 常量字符串不可以被修改。
字符串是值类型
Swift 的String
类型是_值类型_。 如果您创建了一个新的字符串,那么当其进行常量、变量赋值操作,或在函数/方法中传递时,会进行值拷贝。 任何情况下,都会对已有字符串值创建新副本,并对该新副本进行传递或赋值操作。 值类型在 结构体和枚举是值类型 中进行了详细描述。
Swift 默认字符串拷贝的方式保证了在函数/方法中传递的是字符串的值。 很明显无论该值来自于哪里,都是您独自拥有的。 您可以确信传递的字符串不会被修改,除非你自己去修改它。
在实际编译时,Swift 编译器会优化字符串的使用,使实际的复制只发生在绝对必要的情况下,这意味着您将字符串作为值类型的同时可以获得极高的性能。
使用字符
您可通过for-in
循环来遍历字符串中的characters
属性来获取每一个字符的值:
for character in "Dog!🐶".characters {
print(character)
}
// D
// o
// g
// !
// 🐶
另外,通过标明一个Character
类型并用字符字面量进行赋值,可以建立一个独立的字符常量或变量:
let exclamationMark: Character = "!"
字符串可以通过传递一个值类型为Character
的数组作为自变量来初始化:
let catCharacters: [Character] = ["C", "a", "t", "!", "🐱"]
let catString = String(catCharacters)
print(catString)
// 打印输出:"Cat!🐱"
您可以用append()
方法将一个字符附加到一个字符串变量的尾部:
let exclamationMark: Character = "!"
welcome.append(exclamationMark)
// welcome 现在等于 "hello there!"