3.字符串

var emptyString = ""              // 空字符串字面量

var anotherEmptyString = String()  // 初始化方法

// 两个字符串均为空并等价。


if emptyString.isEmpty {

print("Nothing to see here")

}

// 打印输出:"Nothing to see here"


Swift 的String类型是值类型。 如果您创建了一个新的字符串,那么当其进行常量、变量赋值操作,或在函数/方法中传递时,会进行值拷贝。 任何情况下,都会对已有字符串值创建新副本,并对该新副本进行传递或赋值操作。


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

for character in "Dog!🐶".characters {

print(character)

}

// D

// o

// g

// !

// 🐶


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

let exclamationMark: Character = "!"


let catCharacters: [Character] = ["C", "a", "t", "!", "🐱"]

let catString = String(catCharacters)

print(catString)

// 打印输出:"Cat!🐱"


var str = "123"

var char:Character = "4" //写才是字符 默认字符串

str.append(char)

注意:

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


let unusualMenagerie = "Koala 🐨, Snail 🐌, Penguin 🐧, Dromedary 🐪"

print("unusualMenagerie has \(unusualMenagerie.characters.count) characters")

// 打印输出 "unusualMenagerie has 40 characters"


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"


let greeting = "Guten Tag!"

greeting[greeting.startIndex]

// G

greeting[greeting.endIndex.predecessor()]

// !

greeting[greeting.startIndex.successor()]

// u

let index = greeting.startIndex.advancedBy(7)

greeting[index]

// a

试图获取越界索引对应的Character,将引发一个运行时错误。

greeting[greeting.endIndex] // error

greeting.endIndex.successor() // error


let greeting = "Guten Tag!"

for index in greeting.characters.indices {

print("\(greeting[index])", terminator: "-")

}


调用insert(_:atIndex:)方法可以在一个字符串的指定索引插入一个字符。

var welcome = "hello"

welcome.insert("!", atIndex: welcome.endIndex)

// welcome now 现在等于 "hello!"


调用insertContentsOf(_:at:)方法可以在一个字符串的指定索引插入一个字符串。

welcome.insertContentsOf(" there".characters, at: welcome.endIndex.predecessor())

// welcome 现在等于 "hello there!"


调用removeAtIndex(_:)方法可以在一个字符串的指定索引删除一个字符。

welcome.removeAtIndex(welcome.endIndex.predecessor())

// welcome 现在等于 "hello there"


调用removeRange(_:)方法可以在一个字符串的指定索引删除一个字符

let range = welcome.endIndex.advancedBy(-6)..<welcome.endIndex

welcome.removeRange(range)

// welcome 现在等于 "hello"



字符串/字符可以用等于操作符(==)和不等于操作符(!=)

通过调用字符串的hasPrefix(_:)/hasSuffix(_:)方法来检查字符串是否拥有特定前缀/后缀,两个方法均接收一个String类型的参数,并返回一个布尔值。

推荐阅读更多精彩内容