markdown 格式和标点符号的一些修正 (#780)

* 修正全角逗号、句号的使用

* 修正逗号使用

* 修正一处代码空格错误

* 修正斜体范围,引用的空格使用

* 修正示例代码错误

* 修正标点,修正示例代码

* 修正标点

* 修正标点

* 添加 Swift 3.1 的更新

* 修改 Swift 3.0.1 位置

* 添加 Swift 4.0.3 更新

* 添加 Swift 4.1 更新

* 修正示例代码

* 修正 markdown 引用语法,优化翻译语句

* 修正示例代码

* 修正标点使用,优化翻译语句

* 修正示例代码

* 修正示例代码

* 优化翻译语句,修正示例代码语法

* 更新示例代码以符合 Swift 4.1

* 优化 markdown 引用格式的使用

* 优化 markdown 行内代码块使用,代码块与正文使用空格分隔

* 人工校验 markdown 行内代码块使用

* 中英文空格分隔

* 移除行末空格

* 人工校验 markdown 行内代码块使用

* 修正 markdown 无序列表使用

* 统一 markdown 行间代码块的使用

* 人工修正顿号与句号的使用

* 人工修改双引号的使用

* 行内代码块使用“`代码块`”格式
This commit is contained in:
BqLin
2018-04-15 11:02:03 +08:00
committed by 安正超
parent c4e5f11769
commit da6d08cd6e
23 changed files with 77 additions and 42 deletions

View File

@ -64,6 +64,7 @@ Swift 语言存在两种类型:命名型类型和复合型类型。命名型
let someTuple: (Double, Double) = (3.14159, 2.71828)
func someFunction(a: Int) { /* ... */ }
```
在第一个例子中,表达式 `someTuple` 的类型被指定为 `(Double, Double)`。在第二个例子中,函数 `someFunction` 的参数 `a` 的类型被指定为 `Int`
类型注解可以在类型之前包含一个类型特性的可选列表。
@ -166,7 +167,7 @@ f = functionWithDifferentNumberOfArguments // 错误
由于变量标签不是函数类型的一部分,你可以在写函数类型的时候省略它们。
```
```swift
var operation: (lhs: Int, rhs: Int) -> Int // 错误
var operation: (_ lhs: Int, _ rhs: Int) -> Int // 正确
var operation: (Int, Int) -> Int // 正确
@ -180,7 +181,7 @@ var operation: (Int, Int) -> Int // 正确
### 对非逃逸闭包的限制
非逃逸闭包函数不能作为参数传递到另一个非逃逸闭包函数的参数。这样的限制可以让 Swift 在编译时就完成更多的内存访问冲突检查, 而不是在运行时。举个例子:
```
```swift
let external: (Any) -> Void = { _ in () }
func takesTwoFunctions(first: (Any) -> Void, second: (Any) -> Void) {
first(first) // 错误
@ -193,6 +194,7 @@ func takesTwoFunctions(first: (Any) -> Void, second: (Any) -> Void) {
external(first) // 正确
}
```
在上面代码里,`takesTwoFunctions(first:second:)` 的两个参数都是函数。 它们都没有标记为 `@escaping`, 因此它们都是非逃逸的。
上述例子里的被标记为“错误”的四个函数调用会产生编译错误。因为第一个和第二个参数是非逃逸函数,它们不能够被当作变量被传递到另一个非闭包函数参数。与此相反, 标记“正确”的两个函数不回产生编译错误。这些函数调用不会违反限制, 因为 `外部(external)` 不是 `takesTwoFunctions(first:second:)` 里的一个参数。

View File

@ -587,6 +587,7 @@ class SomeClass: NSObject {
let selectorForMethod = #selector(SomeClass.doSomething(_:))
let selectorForPropertyGetter = #selector(getter: SomeClass.property)
```
当为属性的 getter 创建选择器时,属性名可以是变量属性或者常量属性的引用。但是当为属性的 setter 创建选择器时,属性名只可以是对变量属性的引用。
方法名称可以包含圆括号来进行分组,并使用 as 操作符来区分具有相同方法名但类型不同的方法,例如:

View File

@ -102,6 +102,7 @@ Swift 的源文件中的顶级代码 (top-level code) 由零个或多个语句
语句
}
```
代码块中的“语句”包括声明、表达式和各种其他类型的语句,它们按照在源码中的出现顺序被依次执行。
> 代码块语法
@ -332,6 +333,7 @@ typealias 类型别名 = 现存类型
当声明一个类型的别名后,可以在程序的任何地方使用“别名”来代替现有类型。现有类型可以是具有命名的类型或者混合类型。类型别名不产生新的类型,它只是使用别名来引用现有类型。
类型别名声明可以通过泛型参数来给一个现有泛型类型提供名称。类型别名为现有类型的一部分或者全部泛型参数提供具体类型。例如:
```swift
typealias StringDictionary<Value> = Dictionary<String, Value>
@ -339,12 +341,16 @@ typealias StringDictionary<Value> = Dictionary<String, Value>
var dictionary1: StringDictionary<Int> = [:]
var dictionary2: Dictionary<String, Int> = [:]
```
当一个类型别名带着泛型参数一起被声明时,这些参数的约束必须与现有参数的约束完全匹配。例如:
```swift
typealias DictionaryOfInts<Key: Hashable> = Dictionary<Key, Int>
```
因为类型别名可以和现有类型相互交换使用,类型别名不可以引入额外的类型约束。
在协议声明中,类型别名可以为那些经常使用的类型提供一个更短更方便的名称,例如:
```swift
protocol Sequence {
associatedtype Iterator: IteratorProtocol
@ -355,6 +361,7 @@ func sum<T: Sequence>(_ sequence: T) -> Int where T.Element == Int {
// ...
}
```
假如没有类型别名sum 函数将必须引用关联类型通过 T.Iterator.Element 的形式来替代 T.Element。
另请参阅 [协议关联类型声明](#protocol_associated_type_declaration)。
@ -1096,6 +1103,7 @@ extension 类型名称 where 要求 {
声明语句
}
```
扩展声明体可包含零个或多个声明语句。这些声明语句可以包括计算型属性、计算型类型属性、实例方法、类型方法、构造器、下标声明,甚至是类、结构体和枚举声明。扩展声明不能包含析构器、协议声明、存储型属性、属性观察器或其他扩展声明。关于扩展声明的详细讨论,以及各种扩展声明的例子,请参阅 [扩展](../chapter2/21_Extensions.md)。
如果类型为类,结构体,或枚举类型,则扩展声明会扩展相应的类型。如果类型为协议类型,则扩展声明会扩展所有遵守这个协议的类型。在扩展的协议体中声明语句不能使用 `final` 标识符。

View File

@ -141,6 +141,7 @@ var enabled: Bool {
}
}
```
`nonobjc`
该特性用于方法、属性、下标、或构造器的声明,这些声明本可以在 Objective-C 代码中使用,而使用 `nonobjc` 特性则告诉编译器这个声明不能在 Objective-C 代码中使用。
@ -159,6 +160,7 @@ var enabled: Bool {
import AppKit
NSApplicationMain(CommandLine.argc, CommandLine.unsafeArgv)
```
`NSCopying`
该特性用于修饰一个类的存储型变量属性。该特性将使属性的设值方法使用传入值的副本进行赋值,这个值由传入值的 `copyWithZone`(\_:) 方法返回。该属性的类型必需符合 `NSCopying` 协议。