字符串就像糖葫芦,每个位置都有一颗相差不大的糖球
- 字符串的初始化
1. 字符串字面量(提供初始值)
let string = "一串有2个糖球的糖葫芦"
2. 空字符串字面量
var emptyString = "" // 一根签子,可以去串糖葫芦
let nilString = "" // 只有一根签子,不能串糖葫芦
3. 实例化字符串
var anotherEmptyString = String() // 别问,我是糖葫芦
4.多行字符串
let lineBreakString = """
卖糖葫芦了
两块钱一串
嘿嘿
"""
- 字符串判空
推荐 :isEmpty (见名知意)
不推荐 :count == 0
let string = "一串糖葫芦"
if string.isEmpty {
print("字符串为空")
}
原因:
count == 0
* 读取长度的时候,Swift需要去遍历所有的字符
* 是一个O(n)的操作
* 好比有一串糖葫芦,上面有3个糖球,你还是要数一遍才可以判断不为空
isEmpty
* 判断开始索引和结束索引是否相同即可
* 好比有一串糖葫芦,不用关心有几个,只需要关心是不是一根空的签子
-
字符串是值类型
在深海里烤着一串刻有字符的扇贝
* 对二次赋值的字符串进行操作,不会影响到原字符串
* 类似OC中用copy 修饰的字符串
var s1 = "我是人"
var s2 = s1 // 进行一次深拷贝
s2 = "我是一个克隆人" // s2的改变不会对s1造成影响
print(s1) // 打印 我是人
print(s2) // 打印 我是一个克隆人
- 字符串遍历和长度
for-in 遍历每个字符
for character in "swag" {
print(character)
}
打印
s
w
a
g
count:属性必须遍历全部的 Unicode 标量,来确定字符串的字符数量
let string = "123456"
print(string.count) // 6
- 字符串的加法
1.相加
var s1 = "斯威"
let s2 = "夫特"
s1 + s2 // "斯威夫特"
s1 += s2 // 同上
## 🐷 被添加者必须是变量,文中s1必须是变量
2.添加 append (将字符添加到字符串变量的尾部)
let cString: Character = "!"
s1.append(cString) // "斯威!"
## 🐷 不能将一个字符串或者字符添加到一个已经存在的字符变量上,因为字符变量只能包含一个字符
-
Raw String
Swift 5.0 使用 # 包裹字符串,即是原生字符串,减少转义字符的使用
5.0之前
let str = "字符串中有\\转义字符反斜杠\\"
// 打印 "字符串中有\转义字符反斜杠\"
5.0 以后
如果字符串声明被 井 号包裹,\ 不需要转义,就是说井号 之间 写什么就是什么
let str = #"我要输出\转义字符反斜杠\"#
// 打印 "我要输出\转义字符反斜杠\"
🐷 如果字符串中有 井 这个字符,则用两个井包裹字符串
let str = ##"字符串中有#这个符号"##
// 打印 "字符串中有#这个符号"
-
字符串的修改
endIndex 获取最后一个字符的 < 后一个位置 > 的索引
var greeting = "🐯🐶🐔"
1.获取首个字符 -> startIndex
greeting[greeting.startIndex] // 得到 🐯
2.获取最后一个字符 -> endIndex
// endIndex 获取的位置 相当于你握着糖葫芦的手
// 手上方就是最后一个糖葫芦,所以要加个before
greeting[greeting.index(before: greeting.endIndex)] // 得到🐔
3.插入 -> insert
// 在第一位插入兔子
greeting.insert("🐇", at: greeting.startIndex)
// greeting = "🐇🐯🐶🐔"
4.删除 -> remove
// 移除最后一个字符
greeting.remove(at: greeting.index(before: greeting.endIndex))
// greeting = "🐇🐯🐶"
5.移除某一段 removeSubrange
// 移除最后的位置 向前偏移2位 ,也就是最后2位
let range = greeting.index(greeting.endIndex,offsetBy:
-2)..<greeting.endIndex
greeting.removeSubrange(range)
// greeting = "🐇"
- 字符串的打印技巧
1.分隔符
// 输出Hello World,中间用空格分割
print("Hello", "World", separator: " ")
2.同行显示
* terminator 结束符,意为回车
print("Hello", terminator: "")
print("World")
// 虽然有2个print,但是 HelloWorld 不会换行
3.字符串插值
* \() 斜杠 + 括号
let number = 6
print("小明今年 \(number) 岁了")
4.debugPrint
// 可以将推断出的类型添加到输出,例如给字符串内容添加双引号
debugPrint("number")
// 打印的 "number"
- 其它
1.重复拼接字符串
let str = String(repeating: "zzz", count: 2)
print(str)
// "zzzzzz"
2.比较是否相等
==
!=
3.大小写
lowercased() // 全部小写
uppercased() // 全部大写
4.首尾是否包含特定前缀/后缀
hasPrefix 前缀
hasSuffix 后缀
- 个人笔记,还会补充
网友评论