import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//MARK: 字符串的长度
/*
为了获取一个字符串中的字符数量,我们可以用String.characters.count
不同的Unicode字符以及相同Unicode字符的不同表示方式可能需要不同数量的内存空间来存储,
因为在Swift中的字符在一个字符串中表示并不一定占用相同的内存空间。
因此,字符串的长度不得不通过迭代字符串中每一个字符的长度来进行计算。
*/
let string1 ="最美的不是下雨天,是曾与你躲过雨的屋檐"
let string2 ="Because of you ,I never stay too far from sidewalk"
print("string1 has\(CFStringGetLength(string1))")
print("string2 has\(string2.characters.count)")
//MARK: 连接字符串
/**
字符串值可以通过加法运算符(+)相加(或者说链接)在一起并创建一个新的字符串值
运算符-是不可以的哦
let string6 = string3 - "o"
print(string6)
Character不能通过加法运算符来做处理
*/
let string3 = "hello"
let string4 = " jay"
let string5 = string3 + string4
print(string5)
//MARK: 字符串插值
/**
字符串插值是一种全新的构建字符串的方式,可以在其中包含常量、变量、字面量和表达式
插入字符串字面量的每一项需要包裹在以反斜线为前缀的圆括号中.
所写的插值字符串在括号中的表达式里面不能包含非转义双引号 (") 和反斜杠 (\),
并且不能包含回车或换行符
*/
let a = 4
let b = "\(a) * 3 ==\((a) *3)"
print(b)
//MARK: 字符串的比较
/**
Swift 提供了三种方式来比较字符串的值:字符串相等,前缀相等和后缀相等。
通过调用字符串的hasPrefix/hasSuffix方法来检查字符串是否包含特定的前缀/后缀。
这两个方法均需要以字符串作为入参并返回 Boolean值。
这两个方法都采用逐个字符匹配的方式来比较基本字符串是否包含字符前缀或者后缀。
*/
let equalString1 = "let it go"
let equalString2 = "let it go"
if equalString1 == equalString2 {
print("yes, it is equal")
} else {
print("no,it is not equal")
}
let itgo = [
"let it go",
"let me go",
"let you go",
"I like",
"it like",
"you like"
]
for whoGo in itgo {
if (whoGo.hasPrefix("let ")) {
print("\(whoGo) == has prefix of let ")
}
if (whoGo.hasSuffix(" like")) {
print("\(whoGo) == has suffix of like")
}
}
//字符串的大小写
//你可以通过字符串的uppercaseString和lowercaseString 属性来访问一个字符串的大写或小写的版本
let string1 = "May I help you ?"
let upString1 = string1.uppercaseString
print(upString1) //MAY I HELP YOU ?
let lowString1 = string1.lowercaseString
print(lowString1) // may i help you ?
/**
Unicode 是文本编码和表示的国际标准
它使你可以采用标准的格式表示来自任意语言几乎所有的字符
并能够对文本文件或网页这样的外部资源中的字符进行读写操作
Swift的字符串和字符类型是完全兼容Unicode的
它支持如下所述的一系列不同的Unicode编码。
Unicode中每一个字符都可以被表示成一个或多个unicode标量
一个unicode标量是字符或者修饰符的唯一21位数(和名称),
当Unicode字符串被写进文本文件或其他的存储结构时
这些 unicode 标量将会按照Unicode 定义的集中格式之一进行编码。
每个格式将字符串编码为小的代码块-code units,
其包括 UTF-8 格式(以 8 位代码单元进行编码)和 UTF-16 格式(以 16 位代码单元进行编码)。
你可以通过遍历字符串的utf8属性来访问它的 UTF-8 表示。
其为UTF8View类型的属性, UTF8View是无符号 8 位(UInt8) 值的集合,
每一个UIn8都是一个字符的UTF-8表示:
let dog = "dog"
for code in dog.utf8 {
print(code)
}
// 100 111 103 33
在上面的例子中,前四个 10 进制 codeUnit 值 (100, 111, 103, 33) 代表了字符 d o g 和 ! ,
他们的 UTF-8 表示与其 ASCII 表示相同。
可以通过遍历字符串的 utf16 属性来访问它的 UTF-16 表示
其为 UTF16View 类型的属性,
是 UTF16View 是无符号 16 位 (UInt16) 值的集合,
每一个 UInt16 都是一个字符的 UTF-16 表示
*/
let dog = "dog!"
for code in dog.utf8 {
print(code)
}
/**
100
111
103
33
*/
for code in dog.utf16 {
print(code)
}
/**
100
111
103
33
*/
}
}
}