String
是例如"hello world"这样的有序的Character
(字符)类型的值的集合。String
是一种快速的现代化的字符串实现。
swift的String
类型与Foundation的NSString
类进行了无缝桥。可以将创建的任何字符串的值转换成NSString,并调用任意的NSString API。您也可以在任意要求传入NSString实例作为参数的 API 中用String类型的值代替。
1.字符串字面量
字符串字面量是由""
包裹着的具有固定顺序的文本字符集。
let somestring = "some string"
somestring
常量通过字符串字面量进行初始化,swift会推断该常量为String
类型
2.初始化空字符串
var str = "" //空字符串字面量
var str1 = String() //初始化方法
这两个是等价的
可以通过检查其Bool
类型的isEmpty
属性来判断该字符串是否为空:
if str.isEmpty{
print("nothing to see here ")
}
3.字符串可变性
var str1 = "hello"
str1 += "world" //现在变成"helloworld"
let str2 = "hello"
str2 += "world" //编译错误 ,常量str2的值不能修改
4.字符串是值类型
5.使用字符
for char in "dog!".characters{
print(char) // d o g !
}
给character
类型赋值:
let str : Character = "!"
字符串可以通过传递一个值类型为Character
的数组为自变量来初始化:
let str1 :[Character] = ["c","a","t","!"]
let str2 = String(str1)
print(str2) //打印出:cat!
6.连接字符串和字符
*字符串可以通过加法运算符 `+`连接
let str1 = "hello"
let str2 = " girl"
var str3 = str1+str2 // "hello girl"
*也可以通过`+=`将字符串加到已经存在的字符串变量
var str4 = " look"
str4 += str3 //"look hello girl"
*可以用`append()`方法将一个字符串附加到一个字符串尾部
注意:不能将字符串或字符添加到已经存在的字符变量中,因为字符变量只能包含一个字符
7.字符串插值
let str1 = 3
let message = "\(str1) 的 2.5 是 \(Double(str1)* 2.5)"
// 3 的2.5是7.5
8.Unicode
Unicode 是一个国际标准,用于文本的编码和表示,swift的String
和Character
类型是完全兼容Unicode标准的。
String
类型是基于Unicode标量建立的。
Unicode 标量是对应字符或者修饰符的唯一的21位数字,例如U+0061表示小写的拉丁字母(LATIN SMALL LETTER A)("a"),U+1F425表示小鸡表情(FRONT-FACING BABY CHICK) ("🐥")。
9.字符串字面量的特殊字符
* 转义字符
`\0`(空字符)
`\\`(反斜杠)
`\t`(水平制表符)
`\n`(换行符)
`\r`(回车符)
`\"`(双引号)
`\'`(单引号)
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
*Unicode 标量,写成\u{n}(u为小写),其中n为任意一到八位十六进制数且可用的 Unicode 位码。
10.可扩展的字形群集。在这里不多说,用到时再写。
11.计算字符数量
可以使用字符串的characters
属性的count
属性:
let str = "hello"
print("\(str.characters.count)") //5
注意:注意在 Swift 中,使用可拓展的字符群集作为Character值来连接或改变字符串时,并不一定会更改字符串的字符数量。
12.字符串索引
每一个string
值都有一个关联的索引类型,String.Index
,它对应着字符串中的每个Character
的位置.
不同的字符可能湖占用不同数量的内存空间,所以要知道Character
的确定位置,就必须从String
开头遍历每一个Unicode标量直到结束。
swift的字符串不能用整数(interger)做索引.
-
startIndex
可以获取String
的第一个Character
的索引let str = "hello"
str[str.startIndex] // h
-
因为
endIndex
属性可以获取到最后一个Character
的后一个位置的索引,所以endIndex
不能作为一个字符串的有效下标。
*如果string
是空串,startIndex
和endIndex
是相等的。let str = "hello" str[str.endIndex] //error
-
通过调用
String.Index
的predecessor()
方法,可以立即得到前面一个索引。str[str.endIndex.predecessor()] // o
-
调用
successor()
方法可以立即得到后一个索引str[str.startIndex.successor()] // e
-
调用
advancedBy()
方法页可以获取索引let index = str.startIndex.advancedBy(3) str(index) // l
-
使用
characters
属性的indices
属性会创建一个包含全部索引的范围(Range),用来哉一个字符串中访问单个字符for index in str.characters.indices{ print("\(str[index])",terminator:"") } //打印出: h e l l o
注意两个报错点
str[str.endIndex] //下标越界
str.endIndex.successor() //下标越界
13.插入和删除
-
调用
insert(_:atIndex:)
方法可以在一个字符串的指定索引插入一个字符。var str = "hello" str.insert("!",atIndex:str.endIndex) // hello!
*调用insertContentOf(_:at:)
方法可以在一个字符串的指定索引插入一个字符串
var str = "hello"
str.insertContentOf("world!",atIndex:str.endIndex.predecessor()) // helloworld!
*调用removeAtIndex(_:)
可以在指定索引删除一个字符
str.removeAtIndex(str.endIndex.predecessoe()) //helloworld
*调用removeRange(_:)
方法可以在指定索引删除一个字符串
let range = str.endIndex.advancedBy(-5)..<str.endIndex
str.removeRange(range) //hello
14.比较字符串
swift提供了3种方式比较文本:字符相等,前缀相等,后缀相等。
*字符串/字符相等
let a = "hello"
let b = "hello"
if a == b{
print("相等")
} //相等
-
前缀相等
let str = "hello" if str.hasPrefix("he"){ print("以he为开头") } //以he为开头
-
后缀相等
let str = "hello" if str.hasSuffix("o"){ print("以o为结尾") } //以o为结尾
总结
有关Unicode的地方没有做详细介绍,如果需要可 查看Unicode相关信息
网友评论