首页 > 代码库 > Welcome to Swift (苹果官方Swift文档初译与注解十九)---123~132页(第二章..本章节还剩6页)
Welcome to Swift (苹果官方Swift文档初译与注解十九)---123~132页(第二章..本章节还剩6页)
Working with Characters (与字符相关)
在Swift中,String类型表示一组有序字符的值.每个字符都是一个Unicode符号.可以使用for-in循环来遍历字符串中的每个字符:
for character in "Dog!??" {
println(character)
}
// D
// o
// g
// !
// ??
在Swift中也可以使用Character类型来显式的创建一个单字符的常量或者变量:
let yenSign: Character = "¥"
Counting Characters (计算字符个数)
调用全局函数countElements,传递一个字符串作为它的参数,可以计算出这个字符串中字符的数量:
let unusualMenagerie = "Koala ??, Snail ??, Penguin ??, Dromedary ??"
println("unusualMenagerie has \(countElements(unusualMenagerie)) characters")
// prints "unusualMenagerie has 40 characters”
注意点:
不同的Unicode字符,以及相同Unicode字符不同的表示,他们需要的内存存储空间是不同的.因此字符与表示这个字符的字符串有时候的存储空间也是不同的.这样以来,一个字符串的 长度就必须依据通过遍历它的每个字符来计算获得.如果你要处理一个特别长的字符串,请注意,为了准确的计算出字符串的长高度,一定要确保countElements函数遍历了每个字符.
countElements函数返回的字符数与NSString的length属性表示的字符数会有不一致的时候.NSString的length是根据UTF-16格式编码的字符串中16位单元码个数来计算的,而不是 依据字符串中Unicode字符个数来计算的.根据这种情况,NSString的length属性在Swift中被视为 utf16count.
Concatenating Strings and Characters (链接字符串和字符)
字符串和字符的值可以通过加号(+)链接后建立一个新的字符串:
let string1 = "hello"
let string2 = " there"
let character1: Character = "!"
let character2: Character = "?"
let stringPlusCharacter = string1 + character1 // equals "hello!"
let stringPlusString = string1 + string2 // equals "hello there"
let characterPlusString = character1 + string1 // equals "!hello"
let characterPlusCharacter = character1 + character2 // equals "!?”
也可以使用复合加法操作符(+=)来给一个已经定义的字符串再追加一个字符串或字符.
var instruction = "look over"
instruction += string2
// instruction now equals "look over there"
var welcome = "good morning"
welcome += character1
// welcome now equals "good morning!”
注意点:
不能给一个字符变量追加一个字符串或者字符,因为一个字符类型的值只能存储一个字符.
String Interpolation (字符串拼接插入操作)
字符串的拼接插入操作是构建新的字符串的一种方式,通过混合组织常量,变量,文本以及表达式的值在这个字符串文本中.插入到字符串文本中的每个条目都用括号()包住,并在前面写 上饭斜杠(\):
let multiplier = 3
let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
// message is "3 times 2.5 is 7.5”
在上面的例子中,multiplier 的值通过\(multiplier)方式插入到字符串文本中.当执行字符串插入运算的时候,\(multiplier)的位置会被multiplier的实际值取代,从而创建一个明确的字符 串.
字符串末端的multiplier的值是长表达式的一部分.表达式计算出 Double(multiplier) * 2.5的值,然后将计算结果值 (7.5)插入到字符串中.在例子中,是使用 \(Double(multiplier) * 2.5)方式将值包含到字符串中.
注意点:
写字括号()里面的表达式不能包含双引号”或者反斜杠\,也不能包含回车或者换行符.
Comparing Strings (字符串比较)
在Swift中提供了三种方式比较字符串:字符串相等,前缀相等,和后缀相等
String Equality (字符串相等)
如果两个字符串包含的相同次序的字符,那么这两个字符串相等:
let quotation = "We‘re a lot alike, you and I."
let sameQuotation = "We‘re a lot alike, you and I."
if quotation == sameQuotation {
println("These two strings are considered equal")
}
// prints "These two strings are considered equal”
Prefix and Suffix Equality (前缀和后缀相等)
调用字符串的 hasPrefix 和 hasSuffix方法,可以检查一个字符串中是否有指定的前缀或后缀字符串.这两个方法都只带一个String类型的参数,并返回一个布尔类型的值.这个方法都会 进行逐字符的进行比较.
下面的代码例子中,字符串数组表示了Shakespeare’s Romeo and Juliet(莎士比亚的罗密欧与 朱丽叶)前两章情景:
let romeoAndJuliet = [
"Act 1 Scene 1: Verona, A public place",
"Act 1 Scene 2: Capulet‘s mansion",
"Act 1 Scene 3: A room in Capulet‘s mansion",
"Act 1 Scene 4: A street outside Capulet‘s mansion",
"Act 1 Scene 5: The Great Hall in Capulet‘s mansion",
"Act 2 Scene 1: Outside Capulet‘s mansion",
"Act 2 Scene 2: Capulet‘s orchard",
"Act 2 Scene 3: Outside Friar Lawrence‘s cell",
"Act 2 Scene 4: A street in Verona",
"Act 2 Scene 5: Capulet‘s mansion",
"Act 2 Scene 6: Friar Lawrence‘s cell"
]
你可以使用 hasPrefix方法来计算这个戏剧章节1中场景的数量:
var act1SceneCount = 0
for scene in romeoAndJuliet {
if scene.hasPrefix("Act 1 ") {
++act1SceneCount
}
}
println("There are \(act1SceneCount) scenes in Act 1")
// prints "There are 5 scenes in Act 1”
同样的,你也可以使用Capulet’s mansion 和 Friar Lawrence’s cell作为参数,通过hasSuffix方法来计算场景数:
var mansionCount = 0
var cellCount = 0
for scene in romeoAndJuliet {
if scene.hasSuffix("Capulet‘s mansion") {
++mansionCount
} else if scene.hasSuffix("Friar Lawrence‘s cell") {
++cellCount
}
}
println("\(mansionCount) mansion scenes; \(cellCount) cell scenes")
// prints "6 mansion scenes; 2 cell scenes”
Uppercase and Lowercase Strings (字符串的大小写转换)
通过uppercaseString 和lowercaseString属性,可以进行大写或者小写的存储访问:
let normal = "Could you help me, please?"
let shouty = normal.uppercaseString
// shouty is equal to "COULD YOU HELP ME, PLEASE?"
let whispered = normal.lowercaseString
// whispered is equal to "could you help me, please?”