字符串字符文字

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-0089String.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!"