Swift5以前版本 中声明一个字符串常量的时候, 有时候会用到一些特殊字符, 比如换行, 双引号, 反斜杠等等. 这些特殊字符在输入的时候需要进行所谓的转义:
“My \”money\””
这个”money” 需要通过\来转译才能正确解析出下面的字符
My "money”
然而到了Swift 5 我们就可以直接使用下面的方式来解析
这个#号称之为定界符
#My "money”#
##” My ”money” “##
在双引号的两边各加上了两个 # 号, 那么它的左右定界符就变成了 ##” 和 “##.
再例如:
// 1. 默认双引号定界符, 字符串内的双引号需要转义
print("my #1 \"money\"") // 输出: my #1 "app"
// 2. 自定义定界符, 加入两个 #, 双引号和定界符不再冲突, 不需转义
print(##"my #1 "money""##) // 输出: my #1 "app"
// 3. 自定义定界符, 默认的转义符 \ 无效,原样输出
print(##"\"\n"##) // 输出: \"\n
// 4. 自定义定界符, 使用了合规的转义符 \##, 转义
print(##"\##"\##n"##) // 输出: "<换行>
当然作为字符串拼接变量肯定是没问题的,
let launguage = "swift"
print(#"{ var is : "\#(launguage)" }"#)
Swift5 这个称为raw string。
这个特性其他语言已经是实现了的。swift的写法更接近于rust。