File tree 4 files changed +19
-4
lines changed
4 files changed +19
-4
lines changed Original file line number Diff line number Diff line change @@ -72,7 +72,9 @@ numberOfLegs["bird"] = 2
72
72
73
73
## 下标选项 {#subscript-options}
74
74
75
- 下标可以接受任意数量的入参,并且这些入参可以是任意类型。下标的返回值也可以是任意类型。下标可以使用可变参数,但是不能使用 in-out 参数以及不能提供默认参数。
75
+ 下标可以接受任意数量的入参,并且这些入参可以是任何类型。下标的返回值也可以是任意类型。
76
+
77
+ 与函数一样,下标可以接受不同数量的参数,并且为这些参数提供默认值,如在[ 可变参数] ( ./06_Functions.md#variadic-parameters ) 和 [ 默认参数值] ( ./06_Functions.md#default-parameter-values ) 中所述。但是,与函数不同的是,下标不能使用 in-out 参数。
76
78
77
79
一个类或结构体可以根据自身需要提供多个下标实现,使用下标时将通过入参的数量和类型进行区分,自动匹配合适的下标。它通常被称为* 下标的重载* 。
78
80
Original file line number Diff line number Diff line change @@ -450,7 +450,14 @@ let anotherInstance = metatype.init(string: "some string")
450
450
451
451
在协议声明或者协议成员声明时,` Self ` 类型引用的是最终遵循该协议的类型。
452
452
453
- 在结构体,类或者枚举值声明时,` Self ` 类型引用的是声明的类型。在某个类型成员声明时,` Self ` 类型引用的是该类型。在类成员声明时,` Self ` 可以在方法的返回值和方法体中使用,但不能在其他上下文中使用。举个例子,下面的代码演示了返回值是 ` Self ` 的实例方法 ` f ` 。
453
+ 在结构体,类或者枚举值声明时,Self 类型引用的是声明的类型。在某个类型成员声明时,Self 类型引用的是该类型。在类成员声明时,` Self ` 只能在以下几种情况中出现:
454
+
455
+ * 作为方法的返回类型
456
+ * 作为只读下标的返回类型
457
+ * 作为只读计算属性的类型
458
+ * 在方法体中
459
+
460
+ 举个例子,下面的代码演示了返回值是 ` Self ` 的实例方法 ` f ` 。
454
461
455
462
``` swift
456
463
class Superclass {
Original file line number Diff line number Diff line change @@ -677,7 +677,7 @@ let value = s[keyPath: pathToProperty]
677
677
678
678
``` swift
679
679
class SomeClass : NSObject {
680
- @objc var someProperty: Int
680
+ @objc dynamic var someProperty: Int
681
681
init (someProperty : Int ) {
682
682
self .someProperty = someProperty
683
683
}
@@ -977,6 +977,8 @@ myData.someMethod() {$0 == 13}
977
977
myData.someMethod {$0 == 13 }
978
978
```
979
979
980
+ 如 [ 特殊名称方法] ( ./06_Declarations.md#methods-with-special-names ) 所述,通过声明几种方法中的一种,类、结构体或枚举类型可以为函数调用语法启用语法糖。
981
+
980
982
> 函数调用表达式语法
981
983
>
982
984
>
Original file line number Diff line number Diff line change @@ -235,7 +235,7 @@ print(wrapper.x)
235
235
针对枚举或者结构体的声明使用该特性,可以限制你对该类型的修改。它只有在编译迭代库时被允许使用。未来版本的库不能通过添加、删除或重新排序枚举的 case 或结构的存储实例属性来更改声明。在未冻结的类型上,这些操作都是允许的,但是他们破坏了冻结类型的 ABI 兼容性。
236
236
237
237
> 注意
238
- > 当编译器不处于迭代库的模式,所有的结构体和枚举都是隐性冻结,并且你不能使用该特性 。
238
+ > 当编译器不处于迭代库的模式,所有的结构体和枚举都是隐性冻结,并且该特性会被忽视 。
239
239
240
240
在迭代库的模式中,与未冻结结构体和枚举的成员进行交互的代码在被编译时,允许它在不重新编译的情况下继续工作,即使在新版本的库中添加、删除或重新排序该类型的成员。编译器用类似运行时查找信息和添加间接层的技术使之可能。将一个枚举或者结构体标记为冻结将以放弃这种灵活性为代价来获取性能上的提升:未来版本的库只能对类型进行有限的更改,但编译器可以对与类型成员交互的代码进行额外的优化。
241
241
@@ -315,6 +315,10 @@ class ExampleClass: NSObject {
315
315
}
316
316
}
317
317
```
318
+ 更多相关信息,请参考 [ 把 Swift 导入 Objective-C] ( https://developer.apple.com/documentation/swift/imported_c_and_objective-c_apis/importing_swift_into_objective-c ) 。
319
+
320
+ > 注意
321
+ > 具有 ` objc ` 特性的实参也会改变那个声明的运行时名称。在调用与 Objective-C 运行时交互的函数时,比如 [ NSClassFromString] ( https://developer.apple.com/documentation/foundation/1395135-nsclassfromstring ) ,以及在应用程序的 info.plist 文件中指定类名时,你会用到运行时名称。如果你通过传递实参的方式来指定名称,这个名称会作为 Objective-C 代码中的名称和运行时名称。如果你不使用这个实参,在 Objective-C 代码中使用的名称会与 Swift 代码中的名称匹配,并且运行时名称会遵循标准 Swift 编译器名称管理的惯例。
318
322
319
323
### ` objcMembers ` {#objcmembers}
320
324
You can’t perform that action at this time.
0 commit comments