Swift学习笔记(5)——字符串和字符(一)

16 篇文章 0 订阅

1. 初始化空字符串

要创建一个空字符串作为初始值,可以将空的字符串字面量赋值给变量,也可以初始化一个新的String实例:

var emptyString = ""               // 空字符串字面量
var anotherEmptyString = String()  // 初始化方法
// 两个字符串均为空并等价。

可以通过检查其Bool类型的isEmpty属性来判断该字符串是否为空:

if emptyString.isEmpty {
    print("Nothing to see here")
}
// 打印输出:"Nothing to see here"

2.字符串可变性

var variableString = "Horse"
variableString += " and carriage"
// variableString 现在为 "Horse and carriage"

let constantString = "Highlander"
constantString += " and another Highlander"
// 这会报告一个编译错误 (compile-time error) - 常量字符串不可以被修改。

注:
在 Objective-C 和 Cocoa 中,您需要通过选择两个不同的类(NSString和NSMutableString)来指定字符串是否可以被修改。

3. 使用字符

(1)通过for-in循环来遍历字符串中的characters属性来获取每一个字符的值

for character in "Dog!".characters {
    print(character)
}
// D
// o
// g
// !

(2)通过标明一个Character类型并用字符字面量进行赋值,可以建立一个独立的字符常量或变量:

let exclamationMark: Character = "!"

(3)字符串可以通过传递一个值类型为Character的数组作为自变量来初始化:

let catCharacters: [Character] = ["C", "a", "t", "!"]
let catString = String(catCharacters)
print(catString)
// 打印输出:"Cat!"

4.连接字符串和字符

(1)通过加法运算符(+)将两个字符串连接在一起,创建一个新串

let string1 = "hello"
let string2 = " there"
var welcome = string1 + string2
// welcome 现在等于 "hello there"

(2)通过加法赋值运算符 (+=)

var instruction = "look over"
instruction += string2
// instruction 现在等于 "look over there"

(3)用append()方法将一个字符附加到一个字符串变量的尾部

let exclamationMark: Character = "!"
welcome.append(exclamationMark)
// welcome原来为"hello there",用append()方法将"!"附加到原串尾部
// welcome 现在等于 "hello there!"

注:
您不能将一个字符串或者字符添加到一个已经存在的字符变量(Character类型)上,因为字符变量只能包含一个字符。

5. 字符串插值

格式:\ (要插的值的表达式)

let multiplier = 3
let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
// message 是 "3 times 2.5 is 7.5"

注:
插值字符串中写在括号中的表达式不能包含非转义反斜杠 ( \ ),并且不能包含回车或换行符。不过,插值字符串可以包含其他字面量。

6. Unicode

Swift 的String和Character类型是完全兼容 Unicode 标准的。

(一)Unicode 标量
Swift 的String类型是基于 Unicode 标量 建立的。 Unicode 标量是对应字符或者修饰符的唯一的21位数字。
注意:
(1)Unicode 码位(code poing) 的范围是U+0000到U+D7FF或者U+E000到U+10FFFF。Unicode 标量不包括 Unicode 代理项(surrogate pair) 码位,其码位范围是U+D800到U+DFFF。
(2)不是所有的21位 Unicode 标量都代表一个字符,因为有一些标量是留作未来分配的。

(二)字符串字面量的特殊字符
可以包含以下特殊字符:
• 转义字符\0(空字符)、\(反斜线)、\t(水平制表符)、\n(换行符)、\r(回车符)、\”(双引号)、\’(单引号)。
• Unicode 标量,写成\u{n}(u为小写),其中n为任意一到八位十六进制数且可用的 Unicode 位码。

let wiseWords = "\"Imagination is more important than knowledge\" - Einstein"
// "Imageination is more important than knowledge" – Enistein
//\":双引号
let dollarSign = "\u{24}"             // $, Unicode 标量 U+0024
let blackHeart = "\u{2665}"           // ♥, Unicode 标量 U+2665
let sparklingHeart = "\u{1F496}"      // (爱心的表情), Unicode 标量 U+1F496

(三)可扩展的字形群集
每一个 Swift 的Character类型代表一个可扩展的字形群。
例如:
字母é:
方法一:用单一的 Unicode 标量é(U+00E9)
方法二:标准的字母e(U+0065) +一个急促重音(́ )的标量(U+0301)

let eAcute: Character = "\u{E9}"                         // é
let combinedEAcute: Character = "\u{65}\u{301}"          // e 后面加上  ́
// eAcute 是 é, combinedEAcute 是 é

可扩展的字符群集是一个灵活的方法,用许多复杂的脚本字符表示单一的Character值。
例子:

let precomposed: Character = "\u{D55C}"                  // 한
let decomposed: Character = "\u{1112}\u{1161}\u{11AB}"   // ᄒ, ᅡ, ᆫ
// precomposed 是 한, decomposed 是 한
let enclosedEAcute: Character = "\u{E9}\u{20DD}"
// enclosedEAcute 是 é⃝

7. 计算字符数量

如果想要获得一个字符串中Character值的数量,可以使用字符串的characters属性的count属性。
注:
在 Swift 中,使用可拓展的字符群集作为Character值来连接或改变字符串时,并不一定会更改字符串的字符数量。

var word = "cafe"
print("the number of characters in \(word) is \(word.characters.count)")
// 打印输出 "the number of characters in cafe is 4"

word += "\u{301}"    // COMBINING ACUTE ACCENT, U+0301

print("the number of characters in \(word) is \(word.characters.count)")
// 打印输出 "the number of characters in café is 4"

注:
如果您正在处理一个长字符串,需要注意characters属性必须遍历全部的 Unicode 标量,来确定字符串的字符数量。
另外需要注意的是通过characters属性返回的字符数量并不总是与包含相同字符的NSString的length属性相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值