本文章纯粹是中文版《The Swift Programming Language》的学习笔记,所以绝大部分的内容都是文中有的。本文是本人的学习笔记,不是正式系统的记录。仅供参考
以下还是有很多没看懂、不确定的地方,我会以“存疑”的注解指出。
在此感谢中文版翻译者,这极大地加快了 Swift 的学习速度。
本文地址:https://segmentfault.com/a/1190000008369289
Reference:
原版:The Swift Programming Language
中文版:Swift 3 编程语言
概述
字符串在 Swift 里面其实是 String
对象,而不是基本数据类型。不过说实话,个人觉得在 Swift 里面基本数据类型和对象的差别并没有那么明显(不确定)。
字符在 Swift 里面则是 Character
,到底是对象还是基本数据类型,本人目前还不是很清楚。
字符串和字符的创建和修改
创建和访问
字符串和字符的最基本创建方式,就是直接像普通变量那样创建就可以(常量我就忽略啦):
var aStr = "Hello string"
var aChr = "H"
var aEmptyStr = String()
var anotherEmptyStr = ""
字符串可以说是对应着 Objective-C
中的 NSString
和 NSMutableString
类型。不过你不用担心 String
类型到底是可变还是不可变的。String
是一个值类型,底层的值变化由 Swift 自行完成,程序员只需要把它当作 mutable string 来用就可以了。
不过如果与 Foundation 搭配使用的话,那么只能对应 NSString 的方法,不能对应 NSMutableString 方法。
修改和比较
String
类型可以进行修改,比如使用 +=
, +
等操作符。
String
类型可以比较。如果使用 ==
操作符,那么字符串使用的是称为 “规范化相等
” 的规则。规范化相等的定义在后文扩展字形集群
说明。
同理,Character
类型的 ==
`也是规范化相等。
Unicode
String
和 Character
使用 Unicode
保存数据。这与 Objective-C 是对应的 (NSString 和 unichar)。这里要说明一下这两个类型中关于 Unicode 的一些性质了。
Unicode 标量表示
一个 Unicode 标量是一个为字符或者修饰符创建的独一无二的 21 位数字。
特殊转义字符:
\0, \\, \t, \n, \r, \", \'
任意的 Unicode 标量:
\u{十六进制数} // 十六进制数为 1~8 个十六进制字符,无需 “0x” 前缀
扩展字形集群
原文说明得很复杂很严谨,这里简单举例就好。比如一个字母 “é
”,有两种表示方法:
- 单个 Unicode 标量
é
(LATIN SMALL LETTER E WITH ACUTE, 或者U+00E9
) 表示 - 一个标准的字母
e
( LATIN SMALL LETTER E,或者说 U+0065),以及 COMBINING ACUTE ACCENT 标量 (U+0301
) 表示
这两种表示方法,作为字符比较或者字符串比较时,都是相等的,称为规范化相等
。
同样的东西,在韩文中也很常用。
字符串的 Unicode 表示法
分别使用 utf8
、utf16
、unicodeScalars
来获得字符按照三种不同表示法的数组。
三者返回的分别是UInt8
、Uint16
、Uint32
数组
常用方法
-
获取指定位置的字符:
aStr[位置]
-
获取字符数组:
String.characters
-
unicode 表示的字符串长度:
aStr.characters.count
,或者aStr.endIndex
-
插入字符:
insert(_:at:)
,比如:aStr.insert("!", at:aStr.endIndex)
-
插入字符串:
insert(contentsOf:at:)
,比如:aStr.insert(contentsOf:"!!!", at: aStr.endIndex)
-
删除字符串:
remove(at:)
,参数是Range
类型
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。