diff --git a/chapter1/01_swift.html b/chapter1/01_swift.html index aef8a566..64156177 100644 --- a/chapter1/01_swift.html +++ b/chapter1/01_swift.html @@ -46,7 +46,7 @@ -
Swift 是一种新的编程语言,用于编写 iOS 和 OS X 应用程序。Swift 结合了 C 和 Objective-C 的优点并且不受C的兼容性的限制。Swift 使用安全的编程模式并添加了很多新特性,这将使编程更简单,扩展性更强,也更有趣。除此之外,Swift 还支持人见人爱的 Cocoa 和 Cocoa Touch 框架。拥有了这些特性,Swift将重新定义软件开发。
diff --git a/chapter1/02_a_swift_tour.html b/chapter1/02_a_swift_tour.html index 4c9cecb5..f3d0dfe1 100644 --- a/chapter1/02_a_swift_tour.html +++ b/chapter1/02_a_swift_tour.html @@ -46,7 +46,7 @@ -本页内容包括:
diff --git a/chapter1/chapter1.html b/chapter1/chapter1.html index 32e96352..76592772 100644 --- a/chapter1/chapter1.html +++ b/chapter1/chapter1.html @@ -46,7 +46,7 @@ -在本章中您将了解 Swift 的特性和开发历史,并对 Swift 有一个初步的了解。
diff --git a/chapter2/01_The_Basics.html b/chapter2/01_The_Basics.html index 7f174f4b..106f9a9b 100644 --- a/chapter2/01_The_Basics.html +++ b/chapter2/01_The_Basics.html @@ -46,7 +46,7 @@ -Swift 是 iOS 和 OS X 应用开发的一门新语言。然而,如果你有 C 或者 Objective-C 开发经验的话,你会发现 Swift 的很多内容都是你熟悉的。
diff --git a/chapter2/02_Basic_Operators.html b/chapter2/02_Basic_Operators.html index 45683900..258be376 100644 --- a/chapter2/02_Basic_Operators.html +++ b/chapter2/02_Basic_Operators.html @@ -46,7 +46,7 @@ -运算符是检查, 改变, 合并值的特殊符号或短语. 例如, 加号 + 把计算两个数的和(如 let i = 1 + 2). 复杂些的运行算包括逻辑与&&(如 if enteredDoorCode && passedRetinaScan), 还有自增运算符 ++i 这样让自身加一的便捷运算.
本页包含内容:
diff --git a/chapter2/04_Collection_Types.html b/chapter2/04_Collection_Types.html index 8263c0ed..747dbaae 100644 --- a/chapter2/04_Collection_Types.html +++ b/chapter2/04_Collection_Types.html @@ -46,7 +46,7 @@ -本页包含内容:
diff --git a/chapter2/07_Closures.html b/chapter2/07_Closures.html index 2669ed1b..4559cbf2 100644 --- a/chapter2/07_Closures.html +++ b/chapter2/07_Closures.html @@ -46,7 +46,7 @@ -本页内容包含:
diff --git a/chapter2/08_Enumerations.html b/chapter2/08_Enumerations.html index 5c620862..4d6d8e58 100644 --- a/chapter2/08_Enumerations.html +++ b/chapter2/08_Enumerations.html @@ -46,7 +46,7 @@ -本页内容包含:
+Swith语句枚举(enumeration)定义了一个通用类型的一组相关的值,使你可以在你的代码中以一个安全的方式来使用这些值。
+如果你熟悉C语言,你就会知道,在C语言中枚举指定相关名称为一组整型值。Swift中的枚举更加灵活,不必给每一个枚举成员(enumeration member)提供一个值。如果一个值(被认为是“原始”值)被提供给每个枚举成员,则该值可以是一个字符串,一个字符,或是一个整型值或浮点值。
+此外,枚举成员可以指定任何类型的实例值存储到枚举成员值中,就像其他语言中的联合体(unions)和变体(variants)。你可以定义一组通用的相关成员作为枚举的一部分,每一组都有不同的一组与它相关的适当类型的数值。
+在Swift中,枚举类型是一等(first-class)类型。它们采用了很多传统上只被类(class)所支持的特征,例如计算型属性(computed properties),用于提供关于枚举当前值的附加信息, 实例方法(instance methods),用于提供和枚举所代表的值相关联的功能。枚举也可以定义构造函数(initializers)来提供一个初始成员值;可以在原始的实现基础上扩展它们的功能;可以遵守协议(protocols)来提供标准的功能。
+欲了解更多相关功能,请参见属性(Properties),方法(Methods),构造过程(Initialization),扩展(Extensions),和协议(Protocols)。
+使用enum关键词并且把它们的整个定义放在一对大括号内:
enum SomeEumeration {
+ // enumeration definition goes here
+}
+以下是指南针四个方向的一个例子:
+enum CompassPoint {
+ case North
+ case South
+ case East
+ case West
+}
+一个枚举中被定义的值(例如 North,South,East和West)是枚举的成员值(或者成员)。case关键词表明新的一行成员值将被定义。
++注意: +不像C和Objective-C一样,Swift的枚举成员在被创建时不会被赋予一个默认的整数值。在上面的
+CompassPoints例子中,North,South,East和West不是隐式得等于0,1,2和3。相反的,这些不同的枚举成员在CompassPoint的一种显示定义中拥有各自不同的值。
多个成员值可以出现在同一行上,用逗号隔开:
+enum Planet {
+ case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Nepturn
+}
+每个枚举定义了一个全新的类型。像Swift中其他类型一样,它们的名字(例如CompassPoint和Planet)必须以一个大写字母开头。给枚举类型起一个单数名字而不是复数名字,以便于读起来更加容易理解:
var directionToHead = CompassPoint.West
+directionToHead的类型被推断当它被CompassPoint的一个可能值初始化。一旦directionToHead被声明为一个CompassPoint,你可以使用更短的点(.)语法将其设置为另一个CompassPoint的值:
directionToHead = .East
+directionToHead的类型已知时,当设定它的值时,你可以不再写类型名。使用显示类型的枚举值可以让代码具有更好的可读性。
Switch语句你可以匹配单个枚举值和switch语句:
directionToHead = .South
+switch directionToHead {
+case .North:
+ println("Lots of planets have a north")
+case .South:
+ println("Watch out for penguins")
+case .East:
+ println("Where the sun rises")
+case .West:
+ println("Where the skies are blue")
+}
+// prints "Watch out for penguins”
+你可以如此理解这段代码:
+“考虑directionToHead的值。当它等于.North,打印“Lots of planets have a north”。当它等于.South,打印“Watch out for penguins”。”
等等依次类推。
+正如在控制流(Control Flow)中介绍,当考虑一个枚举的成员们时,一个switch语句必须全面。如果忽略了.West这种情况,上面那段代码将无法通过编译,因为它没有考虑到CompassPoint的全部成员。全面性的要求确保了枚举成员不会被意外遗漏。
当不需要匹配每个枚举成员的时候,你可以提供一个默认default分支来涵盖所有未明确被提出的任何成员:
let somePlanet = Planet.Earth
+switch somePlanet {
+case .Earth:
+ println("Mostly harmless")
+default:
+ println("Not a safe place for humans")
+}
+// prints "Mostly harmless”
+上一小节的例子演示了一个枚举的成员是如何被定义(分类)的。你可以为Planet.Earth设置一个常量或则变量,并且在之后查看这个值。然而,有时候会很有用如果能够把其他类型的实例值和成员值一起存储起来。这能让你随着成员值存储额外的自定义信息,并且当每次你在代码中利用该成员时允许这个信息产生变化。
你可以定义Swift的枚举存储任何类型的实例值,如果需要的话,每个成员的数据类型可以是各不相同的。枚举的这种特性跟其他语言中的可辨识联合(discriminated unions),标签联合(tagged unions),或者变体(variants)相似。
+例如,假设一个库存跟踪系统需要利用两种不同类型的条形码来跟踪商品。有些商品上标有UPC-A格式的一维码,它使用数字0到9.每一个条形码都有一个代表“数字系统”的数字,该数字后接10个代表“标识符”的数字。最后一个数字是“检查”位,用来验证代码是否被正确扫描:
+
其他商品上标有QR码格式的二维码,它可以使用任何ISO8859-1字符,并且可以编码一个最多拥有2,953字符的字符串:
+
对于库存跟踪系统来说,能够把UPC-A码作为三个整型值的元组,和把QR码作为一个任何长度的字符串存储起来是方便的。
+在Swift中,用来定义两种商品条码的枚举是这样子的:
+enum Barcode {
+ case UPCA(Int, Int, Int)
+ case QRCode(String)
+}
+以上代码可以这么理解:
+“定义一个名为Barcode的枚举类型,它可以是UPCA的一个实例值(Int,Int,Int),或者QRCode的一个字符串类型(String)实例值。”
这个定义不提供任何Int或String的实际值,它只是定义了,当Barcode常量和变量等于Barcode.UPCA或Barcode.QRCode时,实例值的类型。
然后可以使用任何一种条码类型创建新的条码,如:
+var productBarcode = Barcode.UPCA(8, 85909_51226, 3)
+以上例子创建了一个名为productBarcode的新变量,并且赋给它一个Barcode.UPCA的实例元组值(8, 8590951226, 3)。提供的“标识符”值在整数字中有一个下划线,使其便于阅读条形码。
同一个商品可以被分配给一个不同类型的条形码,如:
+productBarcode = .QRCode("ABCDEFGHIJKLMNOP")
+这时,原始的Barcode.UPCA和其整数值被新的Barcode.QRCode和其字符串值所替代。条形码的常量和变量可以存储一个.UPCA或者一个.QRCode(连同它的实例值),但是在任何指定时间只能存储其中之一。
像以前那样,不同的条形码类型可以使用一个switch语句来检查,然而这次实例值可以被提取作为switch语句的一部分。你可以在switch的case分支代码中提取每个实例值作为一个常量(用let前缀)或者作为一个变量(用var前缀)来使用:
switch productBarcode {
+case .UPCA(let numberSystem, let identifier, let check):
+ println("UPC-A with value of \(numberSystem), \(identifier), \(check).")
+case .QRCode(let productCode):
+ println("QR code with value of \(productCode).")
+}
+// prints "QR code with value of ABCDEFGHIJKLMNOP.”
+如果一个枚举成员的所有实例值被提取为常量,或者它们全部被提取为变量,为了简洁,你可以只放置一个var或者let标注在成员名称前:
switch productBarcode {
+case let .UPCA(numberSystem, identifier, check):
+ println("UPC-A with value of \(numberSystem), \(identifier), \(check).")
+case let .QRCode(productCode):
+ println("QR code with value of \(productCode).")
+}
+// prints "QR code with value of ABCDEFGHIJKLMNOP."
+在实例值小节的条形码例子中演示了一个枚举的成员如何声明它们存储不同类型的实例值。作为实例值的替代,枚举成员可以被默认值(称为原始值)预先填充,其中这些原始值具有相同的类型。
+这里是一个枚举成员存储原始ASCII值的例子:
+enum ASCIIControlCharacter: Character {
+ case Tab = "\t"
+ case LineFeed = "\n"
+ case CarriageReturn = "\r"
+}
+在这里,称为ASCIIControlCharacter的枚举的原始值类型被定义为字符型Character,并被设置了一些比较常见的ASCII控制字符。字符值的描述请详见字符串和字符Strings and Characters部分。
注意,原始值和实例值是不相同的。当你开始在你的代码中定义枚举的时候原始值是被预先填充的值,像上述三个ASCII码。对于一个特定的枚举成员,它的原始值始终是相同的。实例值是当你在创建一个基于枚举成员的新常量或变量时才会被设置,并且每次当你这么做得时候,它的值可以是不同的。
+原始值可以是字符串,字符,或者任何整型值或浮点型值。每个原始值在它的枚举声明中必须是唯一的。当整型值被用于原始值,如果其他枚举成员没有值时,它们会自动递增。
+下面的枚举是对之前Planet这个枚举的一个细化,利用原始整型值来表示每个planet在太阳系中的顺序:
enum Planet: Int {
+ case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
+}
+自动递增意味着Planet.Venus的原始值是2,依次类推。
使用枚举成员的toRaw方法可以访问该枚举成员的原始值:
let earthsOrder = Planet.Earth.toRaw()
+// earthsOrder is 3
+使用枚举的fromRaw方法来试图找到具有特定原始值的枚举成员。这个例子通过原始值7识别Uranus:
let possiblePlanet = Planet.fromRaw(7)
+// possiblePlanet is of type Planet? and equals Planet.Uranus
+然而,并非所有可能的Int值都可以找到一个匹配的行星。正因为如此,fromRaw方法可以返回一个可选的枚举成员。在上面的例子中,possiblePlanet是Planet?类型,或“可选的Planet”。
如果你试图寻找一个位置为9的行星,通过fromRaw返回的可选Planet值将是nil:
let positionToFind = 9
+if let somePlanet = Planet.fromRaw(positionToFind) {
+ switch somePlanet {
+ case .Earth:
+ println("Mostly harmless")
+ default:
+ println("Not a safe place for humans")
+ }
+} else {
+ println("There isn't a planet at position \(positionToFind)")
+}
+// prints "There isn't a planet at position 9
+这个范例使用可选绑定(optional binding),通过原始值9试图访问一个行星。if let somePlanet = Planet.fromRaw(9)语句获得一个可选Planet,如果可选Planet可以被获得,把somePlanet设置成该可选Planet的内容。在这个范例中,无法检索到位置为9的行星,所以else分支被执行。
本页包含内容:
diff --git a/chapter2/10_Properties.html b/chapter2/10_Properties.html index 231fd742..daae70dd 100644 --- a/chapter2/10_Properties.html +++ b/chapter2/10_Properties.html @@ -46,7 +46,7 @@ -一个类可以继承另一个类的方法,属性和其它特性。当一个类继承其它类,继承类叫子类,被继承类叫超类(或父类)。在Swift中,继承是区分「类」与其它类型的一个基本特征。
diff --git a/chapter2/14_Initialization.html b/chapter2/14_Initialization.html index 6cb8ddec..56941db9 100644 --- a/chapter2/14_Initialization.html +++ b/chapter2/14_Initialization.html @@ -46,7 +46,7 @@ -在一个类的实例被释放之前,析构函数被立即调用。用关键字deinit来标示析构函数,类似于初始化函数用init来标示。析构函数只适用于类类型。
diff --git a/chapter2/16_Automatic_Reference_Counting.html b/chapter2/16_Automatic_Reference_Counting.html index 786c6308..cd0228d5 100644 --- a/chapter2/16_Automatic_Reference_Counting.html +++ b/chapter2/16_Automatic_Reference_Counting.html @@ -46,7 +46,7 @@ -本页包含内容:
diff --git a/chapter2/17_Optional_Chaining.html b/chapter2/17_Optional_Chaining.html index 75a1eeeb..676c4369 100644 --- a/chapter2/17_Optional_Chaining.html +++ b/chapter2/17_Optional_Chaining.html @@ -46,7 +46,7 @@ -可选链(Optional Chaining)是一种可以请求和调用属性、方法及子脚本的过程,它的自判断性体现于请求或调用的目标当前可能为空(nil)。如果自判断的目标有值,那么调用就会成功;相反,如果选择的目标为空(nil),则这种调用将返回空(nil)。多次请求或调用可以被链接在一起形成一个链,如果任何一个节点为空(nil)将导致整个链失效。
(ps:为了方便各位检验所以保留了英文,可删。) diff --git a/chapter2/19_Nested_Types.html b/chapter2/19_Nested_Types.html index 8281830f..ce76da49 100644 --- a/chapter2/19_Nested_Types.html +++ b/chapter2/19_Nested_Types.html @@ -46,7 +46,7 @@ -
本页包含内容:
diff --git a/chapter2/20_Extensions.html b/chapter2/20_Extensions.html index f35f50af..ef0e15d7 100644 --- a/chapter2/20_Extensions.html +++ b/chapter2/20_Extensions.html @@ -46,7 +46,7 @@ -本章介绍了 Swift 的各种特性及其使用方法,是全书的核心部分。
diff --git a/chapter3/01_About_the_Language_Reference.html b/chapter3/01_About_the_Language_Reference.html index 1fe72391..479fd3e6 100644 --- a/chapter3/01_About_the_Language_Reference.html +++ b/chapter3/01_About_the_Language_Reference.html @@ -46,7 +46,7 @@ -本书的这一节描述了Swift编程语言的形式语法。这里描述的语法是为了帮助您更详细的了解该语言,而不是让您直接实现一个解析器或编译器。
diff --git a/chapter3/02_Lexical_Structure.html b/chapter3/02_Lexical_Structure.html index a115a2f0..c582e867 100644 --- a/chapter3/02_Lexical_Structure.html +++ b/chapter3/02_Lexical_Structure.html @@ -46,7 +46,7 @@ -Swift 是苹果在 WWDC 2014 上发布的一款全新的编程语言,本书译自苹果官方的 Swift 教程《The Swift Programming Language》。
diff --git a/manifest.appcache b/manifest.appcache index c7b24ff3..51a0b00d 100644 --- a/manifest.appcache +++ b/manifest.appcache @@ -1,5 +1,5 @@ CACHE MANIFEST -# Revision 1402235469938 +# Revision 1402238318317 CACHE: index.html @@ -15,8 +15,8 @@ chapter2/06_Functions.html chapter2/07_Closures.html chapter2/08_Enumerations.html chapter2/09_Classes_and_Structures.html -chapter2/10_Properties.html chapter2/11_Methods.html +chapter2/10_Properties.html chapter2/12_Subscripts.html chapter2/02_Basic_Operators.html chapter2/14_Initialization.html diff --git a/search_index.json b/search_index.json index 1e9f1b0d..3917729e 100644 --- a/search_index.json +++ b/search_index.json @@ -1 +1 @@ -{"version":"0.5.2","fields":[{"name":"title","boost":10},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"index.html#gitbook_61":["2014","issu","languag","program","pull","qq群:364279588","request","swift","undefinedundefin","wwdc"],"chapter1/01_swift.html#gitbook_62":["arc","automat","c","cocoa","cocoa的基础上构建框架栈并将其标准化。objective-c","count","c的兼容性的限制。swift","foundat","hello","io","objective-c","os","refer","swift","touch","undefinedundefin","world","x"],"chapter1/02_a_swift_tour.html#gitbook_63":["0","0..3","0..time","0.0","1","10","100","103","11","12","13","16","19","2","2.5","20","25","3","3.0","3.1","3.59","3.69","3.79","4","42","43","5","5.2","50","597","69105","7","7.simpledescript","70","70.0","75","8","87","8:09","9","9.9","94","a.adjust","a.simpledescript","ac","ace.toraw","acerawvalu","add","addon","addone(numb","adescript","adjust","amount","anoth","anotherproperti","ant","anycommonel","anycommonelements([1","appl","applese","applesummari","area","b","b.adjust","b.simpledescript","bdescript","blue","bool","bottl","c","captain","card","card(rank","card添加一个方法,创建一副完整的扑克牌并把每张牌的rank和suit","case","catfish","celeri","chees","class","club","condit","condition(item","convertedrank","convertedrank.simpledescript","count","counter","counter.incrementby(2","cucumb","dai","default","deinit","diamond","dictionary