字符串字符文字
Swift 中的字符串文字用双引号("
)分隔:
let greeting = "Hello!" // greeting's type is String
人物可以从字符串文字进行初始化,只要文字仅包含一个字形集群:
let chr: Character = "H" // valid
let chr2: Character = "😊" // valid
let chr3: Character = "abc" // invalid - multiple grapheme clusters
字符串插值
字符串插值允许将表达式直接注入字符串文字。这可以使用所有类型的值来完成,包括字符串,整数,浮点数等。
语法是反斜杠,后跟括号包含值:\(value)
。任何有效的表达式都可能出现在括号中,包括函数调用。
let number = 5
let interpolatedNumber = "\(number)" // string is "5"
let fortyTwo = "\(6 * 7)" // string is "42"
let example = "This post has \(number) view\(number == 1 ? "" : "s")"
// It will output "This post has 5 views" for the above example.
// If the variable number had the value 1, it would output "This post has 1 view" instead.
对于自定义类型,字符串插值的默认行为是 "
(myobj)"
等效于 String(myobj)
,print(myobj)
使用相同的表示。你可以通过为你的类型实现 CustomStringConvertible
协议来自定义此行为。
Version >= 3.0
对于 Swift 3,根据 SE-0089 ,String.init<T>(_:)
已更名为 String.init<T>(describing:)
。
字符串插值 "
(myobj)"
将更喜欢新的 String.init<T: LosslessStringConvertible>(_:)
初始值设定项,但如果值不是 LosslessStringConvertible
则会回落到 init<T>(describing:)
。
特殊字符
某些字符需要特殊的转义序列才能在字符串文字中使用它们:
字符 | 含义 |
---|---|
\0 |
空字符 |
\\ |
一个简单的反斜杠,\ |
\t |
制表符 |
\v |
垂直标签 |
\r |
一个回车 |
\n |
一个换行 (换行) |
\" |
双引号," |
\' |
单引号,' |
\u{n} |
Unicode 代码点 n (十六进制) |
例:
let message = "Then he said, \"I \u{1F496} you!\""
print(message) // Then he said, "I 💖 you!"