diff --git a/source/chapter2/01_The_Basics.md b/source/chapter2/01_The_Basics.md index 6d71bbaa..27333623 100755 --- a/source/chapter2/01_The_Basics.md +++ b/source/chapter2/01_The_Basics.md @@ -657,7 +657,7 @@ if let definiteString = assumedString { ## 断言 -可选类型可以让你判断值是否存在,你可以在代码中优雅地处理值缺失的情况。然而,在某些情况下,如果值缺失或者值并不满足特定的条件,你的代码可能并不需要继续执行。这时,你可以在你的代码中触发一个_断言(assertion)_来结束代码运行并通过调试来找到值缺失的原因。 +可选类型可以让你判断值是否存在,你可以在代码中优雅地处理值缺失的情况。然而,在某些情况下,如果值缺失或者值并不满足特定的条件,你的代码可能没办法继续执行。这时,你可以在你的代码中触发一个_断言(assertion)_来结束代码运行并通过调试来找到值缺失的原因。 ### 使用断言进行调试 @@ -673,9 +673,9 @@ assert(age >= 0, "A person's age cannot be less than zero") // 因为 age < 0,所以断言会触发 ``` -在这个例子中,只有`age >= 0`为`true`的时候代码运行才会继续,也就是说,当`age`的值非负的时候。如果`age`的值是负数,就像代码中那样,`age >= 0`为`false`,断言被触发,结束应用。 +在这个例子中,只有`age >= 0`为`true`的时候,即`age`的值非负的时候,代码运行才会继续。如果`age`的值是负数,就像代码中那样,`age >= 0`为`false`,断言被触发,结束应用。 -断言信息不能使用字符串插值。断言信息可以省略,就像这样: +断言信息如果不需要,可以被省略,就像这样: ```swift assert(age >= 0) diff --git a/source/chapter2/03_Strings_and_Characters.md b/source/chapter2/03_Strings_and_Characters.md index 0cca5497..3bc1b248 100755 --- a/source/chapter2/03_Strings_and_Characters.md +++ b/source/chapter2/03_Strings_and_Characters.md @@ -167,30 +167,29 @@ println("unusualMenagerie has \(countElements(unusualMenagerie)) characters") ## 连接字符串和字符 (Concatenating Strings and Characters) -字符串和字符的值可以通过加法运算符(`+`)相加在一起并创建一个新的字符串值: +字符串可以通过加法运算符(`+`)相加在一起(或称“串联”)并创建一个新的字符串: ```swift let string1 = "hello" let string2 = " there" -let character1: Character = "!" -let character2: Character = "?" - -let stringPlusCharacter = string1 + character1 // 等于 "hello!" -let stringPlusString = string1 + string2 // 等于 "hello there" -let characterPlusString = character1 + string1 // 等于 "!hello" -let characterPlusCharacter = character1 + character2 // 等于 "!?" +var welcome = string1 + string2 +// welcome 现在等于 "hello there" ``` -您也可以通过加法赋值运算符 (`+=`) 将一个字符串或者字符添加到一个已经存在字符串变量上: +您也可以通过加法赋值运算符 (`+=`) 将一个字符串添加到一个已经存在字符串变量上: ```swift var instruction = "look over" instruction += string2 -// instruction 现在等于 "look over there" +// instruction 现在等于 "look over there" -var welcome = "good morning" -welcome += character1 -// welcome 现在等于 "good morning!" +``` +你可以用将`append`方法将一个字符附加到一个字符串变量的尾部: + +```swift +let exclamationMark: Character = "!" +welcome.append(exclamationMark) +// welcome 现在等于 "hello there!" ``` > 注意: diff --git a/source/chapter2/21_Protocols.md b/source/chapter2/21_Protocols.md index 8e52d694..ad0bcaa4 100755 --- a/source/chapter2/21_Protocols.md +++ b/source/chapter2/21_Protocols.md @@ -223,7 +223,7 @@ protocol SomeProtocol { **协议构造器规定在类中的实现** -你可以在协议的遵循类中把协议构造器规定实现为指定构造器或者便利构造器。在这两种情况下,你都必须给构造器实现标上"required"修饰符: +你可以在遵循该协议的类中实现构造器,并指定其为类的特定构造器或者便捷构造器。在这两种情况下,你都必须给构造器实现标上"required"修饰符: ```swift class SomeClass: SomeProtocol { diff --git a/source/chapter3/06_Attributes.md b/source/chapter3/06_Attributes.md index fbf2e64f..0b200cac 100755 --- a/source/chapter3/06_Attributes.md +++ b/source/chapter3/06_Attributes.md @@ -23,6 +23,48 @@ 声明特性只能应用于声明。然而,你也可以将`noreturn`特性应用于函数或方法类型。 +`availability` + + +将`availability`特性用于声明时,将表示该声明的生命周期会依赖于特定的平台和操作系统版本。 + +`availability`特性总会与参数列表一同出现,该参数列表至少有两个参数,参数之间由逗号分隔。第一个参数由以下这些平台名字中的一个起头:iOS, iOSApplicationExtension, OSX, or OSXApplicationExtension。当然,你也可以用一个星号(*)来表示,该声明在上面提到的所有平台上都是有效的。剩下的参数,可以以任何顺序出现,并且可以附加关于声明生命周期的附加信息,包括重要的里程碑。 + + +- `unavailable`参数表示该声明在特定的平台上是无效的 + + + +- `introduced`参数表示:特定的平台上,该声明被使用的第一个版本。格式如下:
`introduced=version number`
这个version number由一个正的十进制整数或浮点数构成。 + + +- `deprecated`参数表示:特定的平台上,该声明被建议弃用的第一个版本。格式如下: +
`deprecated=version number`
这个version number由一个正的十进制整数或浮点数构成。 + + +- `obsoleted`参数表示:特定的平台上,该声明被弃用的第一个版本。格式如下: +
`deprecated=version number`
这个version number由一个正的十进制整数或浮点数构成。 + +The message argument is used to provide a textual message that’s displayed by the compiler when emitting a warning or error about the use of a deprecated or obsoleted declaration. It has the following form: +message=message +The message consists of a string literal. +The renamed argument is used to provide a textual message that indicates the new name for a declaration that’s been renamed. The new name is displayed by the compiler when emitting an error about the use of a renamed declaration. It has the following form: +renamed=new name +The new name consists of a string literal. +You can use the renamed argument in conjunction with the unavailable argument and a type alias declaration to indicate to clients of your code that a declaration has been renamed. For example, this is useful when the name of a declaration is changed between releases of a framework or library. +// First release +protocol MyProtocol { + // protocol definition +} +// Subsequent release renames MyProtocol +protocol MyRenamedProtocol { + // protocol definition +} + +@availability(*, unavailable, renamed="MyRenamedProtocol") +typealias MyProtocol = MyRenamedProtocol +You can apply multiple availability attributes on a single declaration to specify the declaration’s availability on different platforms. The compiler uses an availability attribute only when the attribute specifies a platform that matches the current target platform. + `assignment` 该特性用于修饰重载了复合赋值运算符的函数。重载了复合赋值运算符的函数必需将它们的初始输入参数标记为`inout`。如何使用`assignment`特性的一个例子,请见:[复合赋值运算符]()。