3.字符和字符串 Strings and Characters Swift官方文档——版纳的笔记

//: Playground - noun: a place where people can play

import UIKit

// # 字符串字面量
// 多行字符串字面量,也是String类型。String理论上也能做到多行,只是这样更方便了。
let quotation = """
The White Rabbit put on his spectacles.  "Where shall I begin,
please your Majesty?" he asked.

"Begin at the beginning," the King said gravely, "and go on
till you come to the end; then stop."
"""
// 在多行字符串中使用三引号,用反斜杠转译至少一个双引号,借此避免真三引号的出现。另注意缩进以结尾三引号为准。
let threeDoubleQuotes = """
    Escaping the first quote \"""

        Escaping all three quotes \"\"\"

    """
print(threeDoubleQuotes)

// # 初始化一个空字符串
// trick: 检查是否为空
var emptyString = ""
if emptyString.isEmpty {
    print("Nothing to see here")
}

// # 字符串可变性

// # 字符串是值类型
// trick: 字符串是值类型,在c中改变a、b对a、b本身无影响
var a = "wanna"
var b = "gonna"
var c = [a, b]

// # 操作字符
// for-in loop
for character in "Dog!🐶" {
    print(character)
}
// 单独创建字符类型,但用的仍是字符串字面量
let exclamationMark: Character = "!"
// String值可以通过传入 Character值的字符串作为实际参数到它的初始化器来构造,这是因为String有这样的init
let catCharacters: [Character] = ["C", "a", "t", "!", "🐱"]
let catString = String(catCharacters)

// # 连接字符串和字符
var welcome = ""
welcome += "Bonjour"
welcome.append(exclamationMark)

// # 字符串插值

// # Unicode
// Unicode 是一种在不同书写系统中编码、表示和处理文本的国际标准。不是所有的Unicode标量码都对应着字符
// 字符串字面量中的转译特殊字符
"\0"// 空字符
"\\"// 反斜杠
"\t"// 水平制表符
"\n"// 换行符,n是指newline
"\r"// 回车符,r是指return,以上两者在mac下没有什么区别???
"\""// 双引号
"\'"// 单引号
print("hao\rde")
"\u{1F443}" // 用Unicode标量码
// 扩展字形集群
let precomposed: Character = "\u{D55C}" // 한
let decomposed: Character = "\u{1112}\u{1161}\u{11AB}" // ᄒ, ᅡ, ᆫ
let enclosedEAcute: Character = "\u{E9}\u{20DD}" // 封闭标记
// 区域指示符号的 Unicode 标量可以成对组合来成为单一的 Character值
let regionalIndicatorForUS: Character = "\u{1F1FA}\u{1F1F8}"

// # 字符统计
// 注意.count属性要遍历所有Unicode标量码才能断定字符个数,而不是简单的Unicode码个数
var word = "cafe"
word.count
word += "\u{301}" // combined
word.count

// # 访问和修改字符串
// String不是[Character],下标运算不能用整数,只能用index。原因就在于扩展字形集群导致每个字符所占大小可以变化,用整数就会出现一个字符的某个部分这种情况
// endIndex属性是 String中最后一个字符后的位置,并非最后一个字符位置.如果 String为空,则 startIndex与 endIndex相等。
var greeting = "Bonjour!"
greeting[greeting.startIndex]
greeting[greeting.index(after: greeting.startIndex)]
greeting[greeting.index(before: greeting.endIndex)]
// 用offsetBy来向右偏移
greeting[greeting.index(greeting.startIndex, offsetBy: 1)]
// .indices获得了所有有效的index(无endIndex)
for index in greeting.indices {
    print("\(greeting[index])", terminator: "")
}
// 可以在任何遵循了 Indexable 协议的类型中使用 startIndex 和 endIndex 属性以及 index(before:) , index(after:) 和 index(_:offsetBy:) 方法。这包括这里使用的 String ,还有集合类型比如 Array , Dictionary 和 Set 。
var test = [1, 2, 3]
test[test.startIndex]
test[0]
// 删除,remove(at:)返回了一个Character
greeting.remove(at: greeting.index(before: greeting.endIndex))
greeting.removeSubrange(greeting.startIndex..<greeting.endIndex)
// 插入
greeting.insert(contentsOf: ", wee", at: greeting.endIndex)
greeting.insert("!", at: greeting.endIndex)
// 可以在任何遵循了 RangeReplaceableIndexable 协议的类型中使用 insert(_:at:) , insert(contentsOf:at:) , remove(at:) 方法。这包括了这里使用的 String ,同样还有集合类型比如 Array , Dictionary 和 Set.

// # 字符串比较
// 只要String或Character的扩展字形集群拥有相同的语言意义和外形,我们就说它规范化相等,就算它们实际上是由不同的 Unicode 标量组合而成。
// 调用hasPrefix(_:),hasSuffix(_:)返回布尔值来判断字符串是否拥有特定前后缀

// # 字符串的Unicode表示法
// 字符串的Unicode标量会被编码为一定格式
// UTF-8表示法, UTF-16表示法, Unicode标量表示法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容