在 Swift 编程语言中,对字符的表示是独立于某一种特定的 Unicode 编码的.在 Objective-C,Java 等编成语言中,编译器内部一般以 UTF-16 编码格式保存并处理字符串序列,在 swift 编程语言中则直接通过 Unicode 标准组织所制定的标准码点来保存并处理字符串序列的
第一节 转义字符
在任何编程语言中都会有一些特殊字符无法显示在编辑器中,例如空字符.或者与编程语言中表示字符串的语法产生冲突的字符,例如双引号等.
对于与ASCII码兼容的转义字符,swift编程语言中使用倒斜杠作为转义字符的引导前缀,然后定义了以下特殊字符:
1) "\0" 表示空字符,一般用于传统ASCII编码的字符串的结束符.
2) "\\" 表示倒斜杠.
3) "\t" 表示水平制表符.
4) "\n" 表示换行.
5) "\r" 表示回车.
6) "\"" 表示双引号.
7) "\'" 表示单引号.当然,一般单引号在Swift编程语言中表示字符或字符串字面量时不需要做转义,直接用 " ' " 也行.
第二节 字符串的概述
/* 这里将会输出:
The string is: Say, "Hello, world"!
非常好!
* 注意双引号与换行符的输出
*/
let s = "Say, \"Hello, world\"!\n非常好!"
print("The string is: \(s)")"
一个字符串是一组字符序列,在 Swift 编程语言中使用 String 类型来表示字符串类型,使用 var 声明的字符串是可修改的,使用 let 声明的字符串是不可修改的,此外,字符串字面量是不可修改的.
字符串的实例方法与属性,与数组对象类似.
// 这里用空字符串字面量创建一个字符串变量empty
var empty = ""
// 这里用默认字符串构造方法来创建一个空的字符串对象
empty = String()
// 这里用常用的字符串字面量来初始化一个字符串常量
let str = "hello"
// 这里直接通过指定字符序列的字符串构造方法创建一个字符串常量
let str2 = String("hello")
// 这里通过指定一个字符的字符串构造方法来创建一个字符串常量
let ch = String(Character("字"))
1) " + " : 该操作符可将两个字符串拼接起来组成一个新的字符串
2) "+=" : 该操作符只适合可修改的字符串,可以将+=右边的字符串拼接到+=左边的可修改的字符串对象上
eg:
//输出结果为: string = I love you
let string = "I " + "love " + "you"
print("string = \(string)")
3) "==" : 该操作符用来判断两个字符串的字符序列内容是否完全相同,相同返回:true,不相同返回:false
eg:
//输出结果为:string = I love you
var string = "I love "
string += "you"
print("string = \(string)")
4) "isEmpty" : 该实例属性用来判断字符串是否为空
eg:
//输出结果为:result = true
let f_string = "l love you"
let s_string = "l love you"
print("result = \(f_string == s_string)")
5) "contains(_:) " : 该实例方法用来判断是否包含某个子串
eg:
//输出结果为: is empty = false
print("is empty = \(f_string. isEmpty)")
6) "hasPrefix(_:)" : 该实例方法用来判断一个字符串的开头是否包含某个子串
eg:
//输出结果为: is contains = true
print("is contains = \(f_string. contains("love "))")
7) "hasSuffix(_:)" : 该实例方法用来判断一个字符串的末尾是否包含某个子串
eg:
//输出结果为: is hasPrefix = true
print("is hasPrefix = \(f_string. hasPrefix("l "))")
第三节 字符串插值
eg:
//输出结果为: is hasSuffix = true
print("is hasSuffix = \(f_string. hasSuffix("you"))")
""
Swift 编程语言提供一种十分便利的方式可将几乎任一类型的对象转换为一个字符串的表现形式,这在 Swift 中称为字符串插值.我们在之前打印中都有用到,语法很简单:(object) , 这里也是用了转义字符的语法,不过这里不能称为转义字符,因为我们要转换的是一组字符序列.
第四节 字符串的 characters 属性
let x = 10, y = 20
// 这里声明了一个字符串常量s,
// 并且用字符串插值的形式将x + y的结果表示在字符串字面量中,
// 为s进行初始化
let s = "x + y = \(x + y)"
如果我们想要访问一个字符串的每个字符或者查看某个字符串的包含多少个字符,可以使用 characters 属性,要注意的是这里的 characters 属性并不是 [character] 类型,而是 String.CharacterView 类型
第五节 字符串的索引及字符访问
var str = "看旗帜:\u{1f1e8}"
// 我们先观察当前str对象的长度,
// 长度为5
print("str count: \(str.characters.count)") print("before appending:", separator: "", terminator: " ")
// 我们输出当前str中的字符序列
for ch in str.characters {
print("\(ch)", separator: "", terminator: " ")
}
print("")
// 我们再新增一个字符
str.append("\u{1f1f3}")
// 输出当前字符串中字符个数,
// 仍然为5
print("str count: \(str.characters.count)") print("After appending:", separator: "", terminator: " ")
// 最后,我们再逐一输出字符序列
for ch in str.characters {
print("\(ch)", separator: "", terminator: " ")
}
print("")
Swift 编程语言转为 String 类型引入了索引类型 String.Index 用于表示字符串对象中字符序列的索引值,由于 String.Index 类型也遵循了 Comparable 协议,所以它可以作为范围操作符的操作数.
) index(_:offsetBy:) : 通过该方法可以获取到指定的索引值,第一个参数填参考索引值,第二个参数填指定的偏移n,n为正数表示向后移n位,n位负数表示向前移n位.
) index(_:offsetBy:limitedBy:) : 功能和上面一样,这里多了一个参数,第三个参数用于边界检测,如果索引结果超过了第三个参数指定的值,那么将返回空.
有了索引值之后,我们就可以拿他通过字符串的下标操作符获取字符串的指定子串,然后通过子串的 character 属性中的 first 或 last 来获取到当前指定的字符了.
在 Swift4.0 中字符串的下标操作符返回的是 Substring 类型,String 类型的 prefix(:) 方法和 suffix(:) 方法返回的也是 Substring 类型
let str = "看旗帜:
来源: http://www.jianshu.com/p/54dc47a81df5