Skip to content
Permalink
Browse files

统一标准

  • Loading branch information...
wxstars committed Jun 14, 2014
1 parent 7011436 commit 1c10a65bd34219758514408745173b8ef7e5c650
Showing with 82 additions and 82 deletions.
  1. 0 CNAME
  2. 0 README.md
  3. 0 Using Swift with Cocoa and ObjectiveC/02Interoperability/01Interacting with Objective-C APIs.md
  4. BIN Using Swift with Cocoa and ObjectiveC/03Mix and Match/DAG_2x.png
  5. 0 Using Swift with Cocoa and ObjectiveC/03Mix and Match/Swift and Objective-C in the Same Project.md
  6. BIN Using Swift with Cocoa and ObjectiveC/03Mix and Match/bridgingheader_2x.png
  7. 0 change_cdn.py
  8. 0 chapter1/01_swift.html
  9. 0 chapter1/02_a_swift_tour.html
  10. 0 chapter1/chapter1.html
  11. 0 chapter2/01_The_Basics.html
  12. 0 chapter2/02_Basic_Operators.html
  13. 0 chapter2/03_Strings_and_Characters.html
  14. 0 chapter2/04_Collection_Types.html
  15. 0 chapter2/05_Control_Flow.html
  16. 0 chapter2/06_Functions.html
  17. 0 chapter2/07_Closures.html
  18. 0 chapter2/08_Enumerations.html
  19. 0 chapter2/09_Classes_and_Structures.html
  20. 0 chapter2/10_Properties.html
  21. 0 chapter2/11_Methods.html
  22. 0 chapter2/12_Subscripts.html
  23. 0 chapter2/13_Inheritance.html
  24. 0 chapter2/14_Initialization.html
  25. 0 chapter2/15_Deinitialization.html
  26. 0 chapter2/16_Automatic_Reference_Counting.html
  27. 0 chapter2/17_Optional_Chaining.html
  28. 0 chapter2/18_Type_Casting.html
  29. 0 chapter2/19_Nested_Types.html
  30. 0 chapter2/20_Extensions.html
  31. 0 chapter2/21_Protocols.html
  32. 0 chapter2/22_Generics.html
  33. 0 chapter2/23_Advanced_Operators.html
  34. 0 chapter2/chapter2.html
  35. 0 chapter3/01_About_the_Language_Reference.html
  36. 0 chapter3/02_Lexical_Structure.html
  37. 0 chapter3/03_Types.html
  38. 0 chapter3/04_Expressions.html
  39. 0 chapter3/05_Declarations.html
  40. 0 chapter3/06_Attributes.html
  41. 0 chapter3/07_Patterns.html
  42. 0 chapter3/08_Generic_Parameters_and_Arguments.html
  43. 0 chapter3/09_Summary_of_the_Grammar.html
  44. 0 chapter3/10_Statements.html
  45. 0 chapter3/chapter3.html
  46. 0 gitbook/app.js
  47. BIN gitbook/fonts/anonymouspro/400.woff
  48. BIN gitbook/fonts/anonymouspro/400i.woff
  49. BIN gitbook/fonts/anonymouspro/700.woff
  50. BIN gitbook/fonts/anonymouspro/700i.woff
  51. BIN gitbook/fonts/ebgaramond/400.woff
  52. BIN gitbook/fonts/ebgaramond/400i.woff
  53. BIN gitbook/fonts/fontawesome/FontAwesome.otf
  54. BIN gitbook/fonts/fontawesome/fontawesome-webfont.eot
  55. 0 gitbook/fonts/fontawesome/fontawesome-webfont.svg
  56. BIN gitbook/fonts/fontawesome/fontawesome-webfont.ttf
  57. BIN gitbook/fonts/fontawesome/fontawesome-webfont.woff
  58. BIN gitbook/fonts/merriweather/250.woff
  59. BIN gitbook/fonts/merriweather/250i.woff
  60. BIN gitbook/fonts/merriweather/400.woff
  61. BIN gitbook/fonts/merriweather/400i.woff
  62. BIN gitbook/fonts/merriweather/700.woff
  63. BIN gitbook/fonts/merriweather/700i.woff
  64. BIN gitbook/fonts/merriweather/900.woff
  65. BIN gitbook/fonts/merriweather/900i.woff
  66. BIN gitbook/fonts/opensans/300.woff
  67. BIN gitbook/fonts/opensans/300i.woff
  68. BIN gitbook/fonts/opensans/400.woff
  69. BIN gitbook/fonts/opensans/400i.woff
  70. BIN gitbook/fonts/opensans/600.woff
  71. BIN gitbook/fonts/opensans/600i.woff
  72. BIN gitbook/fonts/opensans/700.woff
  73. BIN gitbook/fonts/opensans/700i.woff
  74. BIN gitbook/images/favicon.ico
  75. 0 gitbook/jsrepl/engines/javascript-default.js
  76. 0 gitbook/jsrepl/jsrepl.js
  77. 0 gitbook/jsrepl/langs/javascript/jsrepl_js.js
  78. 0 gitbook/jsrepl/sandbox.html
  79. 0 gitbook/jsrepl/sandbox.js
  80. 0 gitbook/plugins/gitbook-plugin-mathjax/plugin.js
  81. 0 gitbook/plugins/gitbook-plugin-mixpanel/plugin.js
  82. 0 gitbook/print.css
  83. 0 gitbook/style.css
  84. 0 googleb0a4f5a22e9cb82f.html
  85. 0 index.html
  86. 0 manifest.appcache
  87. 0 search_index.json
  88. BIN source/.DS_Store
  89. 0 source/README.md
  90. +1 −1 source/SUMMARY.md
  91. 0 source/chapter1/01_swift.md
  92. +8 −8 source/chapter1/02_a_swift_tour.md
  93. 0 source/chapter1/chapter1.md
  94. 0 source/chapter2/01_The_Basics.md
  95. 0 source/chapter2/02_Basic_Operators.md
  96. 0 source/chapter2/03_Strings_and_Characters.md
  97. 0 source/chapter2/04_Collection_Types.md
  98. 0 source/chapter2/05_Control_Flow.md
  99. +1 −1 source/chapter2/06_Functions.md
  100. 0 source/chapter2/07_Closures.md
  101. 0 source/chapter2/08_Enumerations.md
  102. +2 −2 source/chapter2/09_Classes_and_Structures.md
  103. 0 source/chapter2/10_Properties.md
  104. 0 source/chapter2/11_Methods.md
  105. +26 −26 source/chapter2/12_Subscripts.md
  106. +8 −8 source/chapter2/13_Inheritance.md
  107. 0 source/chapter2/14_Initialization.md
  108. 0 source/chapter2/15_Deinitialization.md
  109. 0 source/chapter2/16_Automatic_Reference_Counting.md
  110. 0 source/chapter2/17_Optional_Chaining.md
  111. 0 source/chapter2/18_Type_Casting.md
  112. 0 source/chapter2/19_Nested_Types.md
  113. +2 −2 source/chapter2/20_Extensions.md
  114. 0 source/chapter2/21_Protocols.md
  115. 0 source/chapter2/22_Generics.md
  116. 0 source/chapter2/23_Advanced_Operators.md
  117. 0 source/chapter2/chapter2.md
  118. 0 source/chapter3/01_About_the_Language_Reference.md
  119. 0 source/chapter3/02_Lexical_Structure.md
  120. 0 source/chapter3/03_Types.md
  121. +4 −4 source/chapter3/04_Expressions.md
  122. +20 −20 source/chapter3/05_Declarations.md
  123. 0 source/chapter3/06_Attributes.md
  124. 0 source/chapter3/07_Patterns.md
  125. 0 source/chapter3/08_Generic_Parameters_and_Arguments.md
  126. +10 −10 source/chapter3/09_Summary_of_the_Grammar.md
  127. 0 source/chapter3/10_Statements.md
  128. 0 source/chapter3/chapter3.md
0 CNAME 100644 → 100755
No changes.
0 README.md 100644 → 100755
No changes.
0 change_cdn.py 100644 → 100755
No changes.
0 chapter1/01_swift.html 100644 → 100755
No changes.
0 chapter1/02_a_swift_tour.html 100644 → 100755
No changes.
0 chapter1/chapter1.html 100644 → 100755
No changes.
0 chapter2/01_The_Basics.html 100644 → 100755
No changes.
0 chapter2/02_Basic_Operators.html 100644 → 100755
No changes.
No changes.
0 chapter2/04_Collection_Types.html 100644 → 100755
No changes.
0 chapter2/05_Control_Flow.html 100644 → 100755
No changes.
0 chapter2/06_Functions.html 100644 → 100755
No changes.
0 chapter2/07_Closures.html 100644 → 100755
No changes.
0 chapter2/08_Enumerations.html 100644 → 100755
No changes.
No changes.
0 chapter2/10_Properties.html 100644 → 100755
No changes.
0 chapter2/11_Methods.html 100644 → 100755
No changes.
0 chapter2/12_Subscripts.html 100644 → 100755
No changes.
0 chapter2/13_Inheritance.html 100644 → 100755
No changes.
0 chapter2/14_Initialization.html 100644 → 100755
No changes.
0 chapter2/15_Deinitialization.html 100644 → 100755
No changes.
No changes.
No changes.
0 chapter2/18_Type_Casting.html 100644 → 100755
No changes.
0 chapter2/19_Nested_Types.html 100644 → 100755
No changes.
0 chapter2/20_Extensions.html 100644 → 100755
No changes.
0 chapter2/21_Protocols.html 100644 → 100755
No changes.
0 chapter2/22_Generics.html 100644 → 100755
No changes.
No changes.
0 chapter2/chapter2.html 100644 → 100755
No changes.
No changes.
No changes.
0 chapter3/03_Types.html 100644 → 100755
No changes.
0 chapter3/04_Expressions.html 100644 → 100755
No changes.
0 chapter3/05_Declarations.html 100644 → 100755
No changes.
0 chapter3/06_Attributes.html 100644 → 100755
No changes.
0 chapter3/07_Patterns.html 100644 → 100755
No changes.
No changes.
No changes.
0 chapter3/10_Statements.html 100644 → 100755
No changes.
0 chapter3/chapter3.html 100644 → 100755
No changes.
0 gitbook/app.js 100644 → 100755
No changes.
No changes.
No changes.
No changes.
No changes.
0 gitbook/fonts/ebgaramond/400.woff 100644 → 100755
No changes.
No changes.
No changes.
No changes.
No changes.
No changes.
No changes.
No changes.
No changes.
No changes.
No changes.
No changes.
No changes.
No changes.
No changes.
0 gitbook/fonts/opensans/300.woff 100644 → 100755
No changes.
0 gitbook/fonts/opensans/300i.woff 100644 → 100755
No changes.
0 gitbook/fonts/opensans/400.woff 100644 → 100755
No changes.
0 gitbook/fonts/opensans/400i.woff 100644 → 100755
No changes.
0 gitbook/fonts/opensans/600.woff 100644 → 100755
No changes.
0 gitbook/fonts/opensans/600i.woff 100644 → 100755
No changes.
0 gitbook/fonts/opensans/700.woff 100644 → 100755
No changes.
0 gitbook/fonts/opensans/700i.woff 100644 → 100755
No changes.
0 gitbook/images/favicon.ico 100644 → 100755
No changes.
No changes.
0 gitbook/jsrepl/jsrepl.js 100644 → 100755
No changes.
No changes.
0 gitbook/jsrepl/sandbox.html 100644 → 100755
No changes.
0 gitbook/jsrepl/sandbox.js 100644 → 100755
No changes.
No changes.
No changes.
0 gitbook/print.css 100644 → 100755
No changes.
0 gitbook/style.css 100644 → 100755
No changes.
0 googleb0a4f5a22e9cb82f.html 100644 → 100755
No changes.
0 index.html 100644 → 100755
No changes.
0 manifest.appcache 100644 → 100755
No changes.
0 search_index.json 100644 → 100755
No changes.
0 source/.DS_Store 100644 → 100755
No changes.
0 source/README.md 100644 → 100755
No changes.
2 source/SUMMARY.md 100644 → 100755
@@ -15,7 +15,7 @@
* [类和结构体](chapter2/09_Classes_and_Structures.md)
* [属性](chapter2/10_Properties.md)
* [方法](chapter2/11_Methods.md)
* [附属脚本](chapter2/12_Subscripts.md)
* [下标脚本](chapter2/12_Subscripts.md)
* [继承](chapter2/13_Inheritance.md)
* [构造过程](chapter2/14_Initialization.md)
* [析构过程](chapter2/15_Deinitialization.md)
0 source/chapter1/01_swift.md 100644 → 100755
No changes.
16 source/chapter1/02_a_swift_tour.md 100644 → 100755
@@ -12,7 +12,7 @@
- [函数和闭包(Functions and Closures)](#functions_and_closures)
- [对象和类(Objects and Classes)](#objects_and_classes)
- [枚举和结构体(Enumerations and Structures)](#enumerations_and_structures)
- [接口和扩展(Protocols and Extensions)](#protocols_and_extensions)
- [协议和扩展(Protocols and Extensions)](#protocols_and_extensions)
- [泛型(Generics)](#generics)

通常来说,编程语言教程中的第一个程序应该在屏幕上打印“Hello, world”。在 Swift 中,可以用一行代码实现:
@@ -623,9 +623,9 @@
注意如何从`ServerResponse`中提取日升和日落时间。

<a name="protocols_and_extensions"></a>
## 接口和扩展
## 协议和扩展

使用`protocol`来声明一个接口
使用`protocol`来声明一个协议

```swift
protocol ExampleProtocol {
@@ -634,7 +634,7 @@
}
```

类、枚举和结构体都可以实现接口
类、枚举和结构体都可以实现协议

```swift
class SimpleClass: ExampleProtocol {
@@ -661,7 +661,7 @@

> 练习:
>
> 写一个实现这个接口的枚举
> 写一个实现这个协议的枚举
注意声明`SimpleStructure`时候`mutating`关键字用来标记一个会修改结构体的方法。`SimpleClass`的声明不需要标记任何方法因为类中的方法经常会修改类。

@@ -683,15 +683,15 @@
>
>`Double`类型写一个扩展,添加`absoluteValue`功能。
你可以像使用其他命名类型一样使用接口名——例如,创建一个有不同类型但是都实现一个接口的对象集合。当你处理类型是接口的值时,接口外定义的方法不可用
你可以像使用其他命名类型一样使用协议名——例如,创建一个有不同类型但是都实现一个协议的对象集合。当你处理类型是协议的值时,协议外定义的方法不可用

```swift
let protocolValue: ExampleProtocol = a
protocolValue.simpleDescription
// protocolValue.anotherProperty // Uncomment to see the error
```

即使`protocolValue`变量运行时的类型是`simpleClass`,编译器会把它的类型当做`ExampleProtocol`这表示你不能调用类在它实现的接口之外实现的方法或者属性
即使`protocolValue`变量运行时的类型是`simpleClass`,编译器会把它的类型当做`ExampleProtocol`这表示你不能调用类在它实现的协议之外实现的方法或者属性

<a name="generics"></a>
## 泛型
@@ -741,4 +741,4 @@
>
> 修改`anyCommonElements`函数来创建一个函数,返回一个数组,内容是两个序列的共有元素。
简单起见,你可以忽略`where`只在冒号后面写接口或者类名` <T: Equatable>``<T where T: Equatable>`是等价的。
简单起见,你可以忽略`where`只在冒号后面写协议或者类名` <T: Equatable>``<T where T: Equatable>`是等价的。
0 source/chapter1/chapter1.md 100644 → 100755
No changes.
0 source/chapter2/01_The_Basics.md 100644 → 100755
No changes.
No changes.
No changes.
No changes.
No changes.
2 source/chapter2/06_Functions.md 100644 → 100755
@@ -471,7 +471,7 @@ println("Result: \(mathFunction(2, 3))")
// prints "Result: 6"
```

就像其他类型一样,当赋值一个函数给常量或变量时,你可以让 Swift 来推测其函数类型
就像其他类型一样,当赋值一个函数给常量或变量时,你可以让 Swift 来推断其函数类型

```swift
let anotherMathFunction = addTwoInts
0 source/chapter2/07_Closures.md 100644 → 100755
No changes.
No changes.
@@ -26,12 +26,12 @@ Swift 中类和结构体有很多共同点。共同处在于:

* 定义属性用于储存值
* 定义方法用于提供功能
* 定义附属脚本用于访问值
* 定义下标脚本用于访问值
* 定义构造器用于生成初始化值
* 通过扩展以增加默认实现的功能
* 符合协议以对某类提供标准功能

更多信息请参见 [属性](10_Properties.html),[方法](11_Methods.html),[附属脚本](12_Subscripts.html),[初始过程](14_Initialization.html),[扩展](20_Extensions.html),和[协议](21_Protocols.html)。
更多信息请参见 [属性](10_Properties.html),[方法](11_Methods.html),[下标脚本](12_Subscripts.html),[初始过程](14_Initialization.html),[扩展](20_Extensions.html),和[协议](21_Protocols.html)。

与结构体相比,类还有如下的附加功能:

0 source/chapter2/10_Properties.md 100644 → 100755
No changes.
0 source/chapter2/11_Methods.md 100644 → 100755
No changes.
52 source/chapter2/12_Subscripts.md 100644 → 100755
@@ -3,25 +3,25 @@
> 校对:zq54zquan

# 附属脚本(Subscripts)
# 下标脚本(Subscripts)
-----------------

本页包含内容:

- [附属脚本语法](#subscript_syntax)
- [附属脚本用法](#subscript_usage)
- [附属脚本选项](#subscript_options)
- [下标脚本语法](#subscript_syntax)
- [下标脚本用法](#subscript_usage)
- [下标脚本选项](#subscript_options)

*附属脚本* 可以定义在类(Class)、结构体(structure)和枚举(enumeration)这些目标中,可以认为是访问对象、集合或序列的快捷方式,不需要再调用实例的特定的赋值和访问方法。举例来说,用附属脚本访问一个数组(Array)实例中的元素可以这样写 `someArray[index]` ,访问字典(Dictionary)实例中的元素可以这样写 `someDictionary[key]`
*下标脚本* 可以定义在类(Class)、结构体(structure)和枚举(enumeration)这些目标中,可以认为是访问对象、集合或序列的快捷方式,不需要再调用实例的特定的赋值和访问方法。举例来说,用下标脚本访问一个数组(Array)实例中的元素可以这样写 `someArray[index]` ,访问字典(Dictionary)实例中的元素可以这样写 `someDictionary[key]`

对于同一个目标可以定义多个附属脚本,通过索引值类型的不同来进行重载,而且索引值的个数可以是多个。
对于同一个目标可以定义多个下标脚本,通过索引值类型的不同来进行重载,而且索引值的个数可以是多个。

> 译者:这里附属脚本重载在本小节中原文并没有任何演示
> 译者:这里下标脚本重载在本小节中原文并没有任何演示
<a name="subscript_syntax"></a>
## 附属脚本语法
## 下标脚本语法

附属脚本允许你通过在实例后面的方括号中传入一个或者多个的索引值来对实例进行访问和赋值。语法类似于实例方法和计算型属性的混合。与定义实例方法类似,定义附属脚本使用`subscript`关键字,显式声明入参(一个或多个)和返回类型。与实例方法不同的是附属脚本可以设定为读写或只读。这种方式又有点像计算型属性的getter和setter:
下标脚本允许你通过在实例后面的方括号中传入一个或者多个的索引值来对实例进行访问和赋值。语法类似于实例方法和计算型属性的混合。与定义实例方法类似,定义下标脚本使用`subscript`关键字,显式声明入参(一个或多个)和返回类型。与实例方法不同的是下标脚本可以设定为读写或只读。这种方式又有点像计算型属性的getter和setter:

```
subscript(index: Int) -> Int {
@@ -35,7 +35,7 @@ subscript(index: Int) -> Int {
}
```

`newValue`的类型必须和附属脚本定义的返回类型相同。与计算型属性相同的是set的入参声明`newValue`就算不写,在set代码块中依然可以使用默认的`newValue`这个变量来访问新赋的值。
`newValue`的类型必须和下标脚本定义的返回类型相同。与计算型属性相同的是set的入参声明`newValue`就算不写,在set代码块中依然可以使用默认的`newValue`这个变量来访问新赋的值。

与只读计算型属性一样,可以直接将原本应该写在`get`代码块中的代码写在`subscript`中:

@@ -45,7 +45,7 @@ subscript(index: Int) -> Int {
}
```

下面代码演示了一个在`TimesTable`结构体中使用只读附属脚本的用法,该结构体用来展示传入整数的*n*倍。
下面代码演示了一个在`TimesTable`结构体中使用只读下标脚本的用法,该结构体用来展示传入整数的*n*倍。

```
struct TimesTable {
@@ -61,41 +61,41 @@ println("3的6倍是\(threeTimesTable[6])")

在上例中,通过`TimesTable`结构体创建了一个用来表示索引值三倍的实例。数值`3`作为结构体`构造函数`入参初始化实例成员`multiplier`

你可以通过附属脚本来得到结果,比如`threeTimesTable[6]`。这条语句访问了`threeTimesTable`的第六个元素,返回`6``3`倍即`18`
你可以通过下标脚本来得到结果,比如`threeTimesTable[6]`。这条语句访问了`threeTimesTable`的第六个元素,返回`6``3`倍即`18`

>注意:
>
> `TimesTable`例子是基于一个固定的数学公式。它并不适合开放写权限来对`threeTimesTable[someIndex]`进行赋值操作,这也是为什么附属脚本只定义为只读的原因
> `TimesTable`例子是基于一个固定的数学公式。它并不适合开放写权限来对`threeTimesTable[someIndex]`进行赋值操作,这也是为什么下标脚本只定义为只读的原因

<a name="subscript_usage"></a>
## 附属脚本用法
## 下标脚本用法

根据使用场景不同附属脚本也具有不同的含义。通常附属脚本是用来访问集合(collection),列表(list)或序列(sequence)中元素的快捷方式。你可以在你自己特定的类或结构体中自由的实现附属脚本来提供合适的功能
根据使用场景不同下标脚本也具有不同的含义。通常下标脚本是用来访问集合(collection),列表(list)或序列(sequence)中元素的快捷方式。你可以在你自己特定的类或结构体中自由的实现下标脚本来提供合适的功能

例如,Swift 的字典(Dictionary)实现了通过附属脚本来对其实例中存放的值进行存取操作。在附属脚本中使用和字典索引相同类型的值,并且把一个字典值类型的值赋值给这个附属脚本来为字典设值
例如,Swift 的字典(Dictionary)实现了通过下标脚本来对其实例中存放的值进行存取操作。在下标脚本中使用和字典索引相同类型的值,并且把一个字典值类型的值赋值给这个下标脚本来为字典设值

```
var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
numberOfLegs["bird"] = 2
```

上例定义一个名为`numberOfLegs`的变量并用一个字典字面量初始化出了包含三对键值的字典实例。`numberOfLegs`的字典存放值类型推断为`Dictionary<String, Int>`字典实例创建完成之后通过附属脚本的方式将整型值`2`赋值到字典实例的索引为`bird`的位置中。
上例定义一个名为`numberOfLegs`的变量并用一个字典字面量初始化出了包含三对键值的字典实例。`numberOfLegs`的字典存放值类型推断为`Dictionary<String, Int>`字典实例创建完成之后通过下标脚本的方式将整型值`2`赋值到字典实例的索引为`bird`的位置中。

更多关于字典(Dictionary)附属脚本的信息请参考[读取和修改字典](../chapter2/04_Collection_Types.html)
更多关于字典(Dictionary)下标脚本的信息请参考[读取和修改字典](../chapter2/04_Collection_Types.html)

> 注意:
>
> Swift 中字典的附属脚本实现中,在`get`部分返回值是`Int?`,上例中的`numberOfLegs`字典通过附属脚本返回的是一个`Int?`或者说“可选的int”,不是每个字典的索引都能得到一个整型值,对于没有设过值的索引的访问返回的结果就是`nil`;同样想要从字典实例中删除某个索引下的值也只需要给这个索引赋值为`nil`即可。
> Swift 中字典的下标脚本实现中,在`get`部分返回值是`Int?`,上例中的`numberOfLegs`字典通过下标脚本返回的是一个`Int?`或者说“可选的int”,不是每个字典的索引都能得到一个整型值,对于没有设过值的索引的访问返回的结果就是`nil`;同样想要从字典实例中删除某个索引下的值也只需要给这个索引赋值为`nil`即可。
<a name="subscript_options"></a>
## 附属脚本选项
## 下标脚本选项

附属脚本允许任意数量的入参索引,并且每个入参类型也没有限制。附属脚本的返回值也可以是任何类型。附属脚本可以使用变量参数和可变参数,但使用写入读出(in-out)参数或给参数设置默认值都是不允许的。
下标脚本允许任意数量的入参索引,并且每个入参类型也没有限制。下标脚本的返回值也可以是任何类型。下标脚本可以使用变量参数和可变参数,但使用写入读出(in-out)参数或给参数设置默认值都是不允许的。

一个类或结构体可以根据自身需要提供多个附属脚本实现,在定义附属脚本时通过入参个类型进行区分,使用附属脚本时会自动匹配合适的附属脚本实现运行,这就是*附属脚本的重载*
一个类或结构体可以根据自身需要提供多个下标脚本实现,在定义下标脚本时通过入参个类型进行区分,使用下标脚本时会自动匹配合适的下标脚本实现运行,这就是*下标脚本的重载*

一个附属脚本入参是最常见的情况,但只要有合适的场景也可以定义多个附属脚本入参。如下例定义了一个`Matrix`结构体,将呈现一个`Double`类型的二维矩阵。`Matrix`结构体的附属脚本需要两个整型参数
一个下标脚本入参是最常见的情况,但只要有合适的场景也可以定义多个下标脚本入参。如下例定义了一个`Matrix`结构体,将呈现一个`Double`类型的二维矩阵。`Matrix`结构体的下标脚本需要两个整型参数

```
struct Matrix {
@@ -141,7 +141,7 @@ row0 [0.0, 0.0,
row1 0.0, 0.0]
```

将值赋给带有`row``column`附属脚本的`matrix`实例表达式可以完成赋值操作,附属脚本入参使用逗号分割
将值赋给带有`row``column`下标脚本的`matrix`实例表达式可以完成赋值操作,下标脚本入参使用逗号分割

```
matrix[0, 1] = 1.5
@@ -155,15 +155,15 @@ matrix[1, 0] = 3.2
3.2, 0.0]
```

`Matrix`附属脚本的`getter``setter`中同时调用了附属脚本入参的`row``column`是否有效的判断。为了方便进行断言,`Matrix`包含了一个名为`indexIsValid`的成员方法,用来确认入参的`row``column`值是否会造成数组越界:
`Matrix`下标脚本的`getter``setter`中同时调用了下标脚本入参的`row``column`是否有效的判断。为了方便进行断言,`Matrix`包含了一个名为`indexIsValid`的成员方法,用来确认入参的`row``column`值是否会造成数组越界:

```
func indexIsValidForRow(row: Int, column: Int) -> Bool {
return row >= 0 && row < rows && column >= 0 && column < columns
}
```

断言在附属脚本越界时触发
断言在下标脚本越界时触发

```
let someValue = matrix[2, 2]
Oops, something went wrong.

0 comments on commit 1c10a65

Please sign in to comment.
You can’t perform that action at this time.