可以使用for-in循环迭代一个字符串来访问每一个字符值:
for character in "Dog!🐶" {
print(character)
}
// D
// o
// g
// !
// 🐶
你可以创建一个单独的Character常量或者变量,使用只包含了一个字符的字符串字面量,并且在常量或者变量后面提供Character类型标注;
let exclamationMark: Character = "!"
String值可以通过传入一个Character数组来构建:
let catCharacters: [Character] = ["C", "a", "t", "!", "🐱"]
let catString = String(catCharacters)
print(catString)
// 打印 "Cat!🐱
字符串和字符
字符串可以通过加符运算符相加创造一个新的字符串:
let string1 = "hello"
let string2 = " there"
var welcome = string1 + string2
// welcome 现在是 "hello there"
你也可以使用加法运算符把一个字符串添加到另外一个字符串后面:
var instruction = "look over"
instruction += string2
// instruction 现在是 "look over there”
也可以用字符串的append方法把一个字符添加到另一个字符串后面:
let exclamationMark: Character = "!"
welcome.append(exclamationMark)
// welcome 现在是 "hello there!”
NOTE:不可以把一个字符串或者字符添加到另外一个字符的后面,字符是只可以包含一个字符。
也许你使用多行字符串字面量创建了一个有很多行的长字符串,并且你希望每一行的结尾都有一个换行符,也包括最后一行。比如:
let badStart = """
one
two
"""
let end = """
three
"""
print(badStart + end)
// 打印出2行:
// one
// twothree
let goodStart = """
one
two
"""
print(goodStart + end)
// 打印出3行:
// one
// two
// three
上面的代码中,把badStart和end连接成个了一个打印出2行的字符串,当然这是不符合我们的需求的。究其原因,badStart的最后一行不是以换行符结尾的,这一行直接和end的第一行连接在了一起。相反的是,goodStart的每一行都是以换行符结尾的,所以和end连接之后可以打印出三行,这是我们需要的结果。
字符串插入
字符串插入是一种创建新字符串的方式,这种方式可以把常量,变量,字面量甚至是表达式包含在一个字符串字面量中。字符串插入在单行和多行字符串字面量中都可以使用。每一个你插入的元素都被一组括号包围,且有前缀反斜杠(\):
let multiplier = 3
let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
// 3 times 2.5 is 7.5
上面的例子中,multiplier的值以 \(multiplier)的方式被插入到了字符串字面量中,这是一个占位符,当字符串字面量被求值的时候会被替换成multiplier真正的值,并且创建一个真正的字符串。
multiplier也同时是上面字符串字面量的中一个表达式的一部分,这个表达式计算Double(multiplier) * 2.5的结果,并且把结果7.5插入到字面量中。在这里,表达式以\(Double(multiplier) * 2.5)的方式被插入到字面量中。
NOTE:使用字符串插入的时候,括号中的表达式里面不可以包含未转移的斜杠,回车,或者换行。当然,它们是可以包含在其他字符串字面量中的。