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?”

Welcome to Swift (苹果官方Swift文档初译与注解十九)---123~132页(第二章..本章节还剩6页)

时间: 2024-10-11 11:43:11

Welcome to Swift (苹果官方Swift文档初译与注解十九)---123~132页(第二章..本章节还剩6页)的相关文章

Welcome to Swift (苹果官方Swift文档初译与注解十)---63~69页(第二章)

如果你将整型与浮点型一起使用,结果将被认为是Double类型: et anotherPi = 3 + 0.14159 // anotherPi 的类型是Double 上述代码中,3的值是没有明确说明类型,因此,根据剩余部分的浮点类型可以确定返回值为Double. Numeric Literals (数值的进制表示) 整数类型可以进行如下表示: A decimal number, with no prefix         // 十进制数值,不需要前缀符号; A binary number, w

Welcome to Swift (苹果官方Swift文档初译与注解十二)---77~83页(第二章)

Optionals (可选类型) 当一个值可能有值,也可能没有值,这种情况你可以使用可选类型.可选类型的意思是: 有个一个值,它等于x,或者,根本没有任何值. 注意点: 可选类型的概念在C和OC中都是没有的.在OC中最相似的情况是,一个方法返回nil或者返回一个对象.OC中返回nil意思是没有合法的对象.然而,这只能针对对象,不能用在结构体,基本 数据类型,或者枚举值.对于这些类型,OC的方法只能返回固定的某个值(比如NSNotFound)来提示没有某个值.这要去方法的调用者清楚的记得返回的固定

Welcome to Swift (苹果官方Swift文档初译与注解十八)---116~122页(第二章)

Strings and Characters (字符串和字符) 字符串是一组字符组成的序列,例如“hello, world" 或 "albatross”.在Swift中,字符串使用String类型进行声明,它代表一组由Character(字符)类型组成的值的序列. String类型和Character类型提供了一种在代码中处理 (兼容Unicode) 文本的快速方式.字符串创建和管理的语法与C语言的相似,都属于轻量级并且可读性好.字符串的拼接只是简单的 使用加号(+)操作符,而且字符串

Welcome to Swift (苹果官方Swift文档初译与注解十四)---90~93页(第二章)

Debugging with Assertions (断言调试) 断言是一个假设逻辑条件为真的运行时检查机制.在执行任意代码之前,可以使用断言来确认一个基本的条件情况.如果条件判断为真,代码将继续执行,如果条件为假,代码将会结束,应 用程序也会退出. 如果在调试环境中,运行的代码触发了一个断言(比如你在Xcode中编译并运行一个应用),你可以明确的看到错误的状态发生在哪里,并且查询应用程序在这个时刻的状态.断言也可以让 你使用适合的调测显示信息作为断言信息. 可以写一个全局函数assert来触发

Welcome to Swift (苹果官方Swift文档初译与注解三十五)---248~253页(第五章-- 函数 完)

Function Types as Return Types (函数类型作为返回值类型) 一个函数的类型可以作为另一个函数的返回值类型.可以在一个函数的返回值箭头后面写上一个完整的函数类型. 例如: 下面的例子定义了两个简单的函数,分别为stepForward 和 stepBackward.其中stepForward函数返回值比它的输入值多1,stepBackward函数返回值比它输入值少1.这两个函数的 类型都是(Int) -> Int: func stepForward(input: Int

Welcome to Swift (苹果官方Swift文档初译与注解二十七)---189~198页(第四章-- 流程控制)

Switch 一个switch语句里包含一个值,并且用这个值与其他几个可能的匹配模式进行比较,然后根据成功匹配上的模式,执行相应的代码块.switch语句提供了比if语句更多的选项来相应多种潜 在的情况. 最简单的一个例子: switch some value to consider { case value 1:   respond to value 1 case value 2, value 3:   respond to value 2 or 3 default:   otherwise,

Welcome to Swift (苹果官方Swift文档初译与注解二十一)---140~147页(第三章--集合类型)

第三章 Collection Types (集合类型) 在Swift中,提供了两种集合类型用来存储一组值:数组和字典.数组有序的存储相同类型的值;字典存储无序的相同类型的值.字典可以通过唯一的标识(就是所说的键)来查询和访问. 在Swift中,数组和字典总是要清晰的标明他们存储数据的类型.这就意味着不可以将错误的类型插入到数组或字典中.同时也意味着你是明确了解你要遍历的数组或字典里面数据的类 型.在Swift中,集合要显式的声明类型来保证在开发中都会明确的知道它能处理的数据类型. 注意点: 在S

Welcome to Swift (苹果官方Swift文档初译与注解十一)---70~76页(第二章)

Type Aliases (类型别名) 类型别名是个已经存在的类型定义另一个名字.定义类型别名的时候,使用关键字typealias. 当你想要使用名字来引用一个已经存在的类型时,类型别名将非常有效,并且更适合代码的上下文理解.例如,当要处理指定大小的一个数据时: typealias AudioSample = UInt16 一旦定义了一个类型别名,就可以在任何地方来代替原来的类型名: var maxAmplitudeFound = AudioSample.min // maxAmplitudeF

Welcome to Swift (苹果官方Swift文档初译与注解三)---11~18页

上述代码中,如果可选值为nil,那么判断条件则为false,而且在{}中的代码将会被忽略,如果可选值不为nil,会将该值逐步运算后赋值给let后面的常量,其中逐步运算过程将依据实际的代码块. Switch 语法支持任何类型数据以及各种比较操作,并不局限在整型. let vegetable = "red pepper" switch vegetable { case "celery": let vegetableComment = "Add some rai