03/06 refine

This commit is contained in:
Hawstein
2014-06-09 11:08:57 +08:00
parent 54a2682c73
commit b0229bbe75

View File

@ -1,6 +1,6 @@
# 特性
特性提供了关于声明和类型的更多信息。在Swift中有两类特性用于声明的以及用于类型的。例如,`required`性,当应用于一个类的[待改designated或convenience]初始化器声明时,表明它的每个子类都必须实现那个初始化器。再比如`noreturn`特性,当应用于函数或方法类型时,表明该函数或方法不会返回到它的调用者。
特性提供了关于声明和类型的更多信息。在Swift中有两类特性用于修饰声明的以及用于修饰类型的。例如,`required`性,当应用于一个类的指定或便利初始化器声明时,表明它的每个子类都必须实现那个初始化器。再比如`noreturn`特性,当应用于函数或方法类型时,表明该函数或方法不会返回到它的调用者。
通过以下方式指定一个特性:符号`@`后面跟特性名,如果包含参数,则把参数带上:
@ -9,7 +9,7 @@
@attribute name(attribute arguments)
```
有些声明特性通过接收参数来指定特性的更多信息以及它是如何应用于一个特定的声明的。这些特性的参数写在小括号内,它们的格式由它们所属的特性来定义。
有些声明特性通过接收参数来指定特性的更多信息以及它是如何修饰一个特定的声明的。这些特性的参数写在小括号内,它们的格式由它们所属的特性来定义。
## 声明特性
@ -17,45 +17,45 @@
`assignment`
重载了复合赋值运算符的函数应用这个特性。重载了复合赋值运算符的函数必需将它们的初始输入参数标记为`inout`。如何使用`assignment`特性的一个例子,请见:[复合赋值运算符]()。
该特性用于修饰重载了复合赋值运算符的函数。重载了复合赋值运算符的函数必需将它们的初始输入参数标记为`inout`。如何使用`assignment`特性的一个例子,请见:[复合赋值运算符]()。
`class_protocol`
对一个协议应用该特性表明该协议只能被类类型采用[待改adopted]。
该特性用于修饰一个协议表明该协议只能被类类型采用[待改adopted]。
如果你`objc`特性一个协议,`class_protocol`特性就会隐式地应用到该协议,因此无需显式地用`class_protocol`特性标记该协议。
如果你用`objc`特性修饰一个协议,`class_protocol`特性就会隐式地应用到该协议,因此无需显式地用`class_protocol`特性标记该协议。
`exported`
对一个导入声明应用该特性,以此来导出已导入的模块,子模块,或当前模块的声明。如果另一个模块导入了当前模块,那么那个模块可以访问当前模块的导出项。
该特性用于修饰导入声明,以此来导出已导入的模块,子模块,或当前模块的声明。如果另一个模块导入了当前模块,那么那个模块可以访问当前模块的导出项。
`final`
一个类或类中的属性,方法,下标成员应用这个特性。如果将它应用于一个类,那么这个类则不能被继承。如果将它应用于类中的属性,方法或下标,则表示在子类中,它们不能被重写。
该特性用于修饰一个类或类中的属性,方法,以及下标成员。如果用它修饰一个类,那么这个类则不能被继承。如果用它修饰类中的属性,方法或下标,则表示在子类中,它们不能被重写。
`lazy`
类或结构体中的存储型变量属性应用该特性,表示该属性的初始值最多只被计算和存储一次,且发生在第一次访问它时。如何使用`lazy`特性的一个例子,请见:[惰性存储型属性]()。
该特性用于修饰类或结构体中的存储型变量属性,表示该属性的初始值最多只被计算和存储一次,且发生在第一次访问它时。如何使用`lazy`特性的一个例子,请见:[惰性存储型属性]()。
`noreturn`
对一个函数或方法声明应用该特性,表明该函数或方法的对应类型,`T`,是`@noreturn T`。你可以用这个特性标记函数或方法的类型,这样一来,函数或方法就不会返回到它的调用者中去。
该特性用于修饰函数或方法声明,表明该函数或方法的对应类型,`T`,是`@noreturn T`。你可以用这个特性修饰函数或方法的类型,这样一来,函数或方法就不会返回到它的调用者中去。
对于一个没有用`noreturn`特性标记的函数或方法,你可以将它重写(override)为用该特性标记的。相反,对于一个已经用`noreturn`特性标记的函数或方法,你则不可以将它重写为没使用该特性标记的。相同的规则试用于当你在一个一致性类型中实现一个协议方法时。
对于一个没有用`noreturn`特性标记的函数或方法,你可以将它重写(override)为用该特性标记的。相反,对于一个已经用`noreturn`特性标记的函数或方法,你则不可以将它重写为没使用该特性标记的。相同的规则试用于当你在一个comforming类型中实现一个协议方法时。
`NSCopying`
一个类的存储型变量属性应用该特性。该特性将使属性的setter与属性值的一个副本合成`copyWithZone`方法返回,而不是属性本身的值。该属性的类型必需符合`NSCopying`协议。
该特性用于修饰一个类的存储型变量属性。该特性将使属性的setter与属性值的一个副本合成`copyWithZone`方法返回,而不是属性本身的值。该属性的类型必需遵循`NSCopying`协议。
`NSCopying`特性的行为与Objective-C中的`copy`特性相似。
`NSManaged`
`NSManagedObject`子类中的存储型变量属性应用该特性表明属性的存储和实现由Core Data在运行时基于相关实体描述动态提供。
该特性用于修饰`NSManagedObject`子类中的存储型变量属性表明属性的存储和实现由Core Data在运行时基于相关实体描述动态提供。
`objc`
任意可以在Objective-C中表示的声明应用该特性比如非嵌套类协议类和协议中的属性和方法包含getter和setter初始化器析构器以下下标。`objc`特性告诉编译器该声明可以在Objective-C代码中使用。
该特性用于修饰任意可以在Objective-C中表示的声明比如非嵌套类协议类和协议中的属性和方法包含getter和setter初始化器析构器以下下标。`objc`特性告诉编译器该声明可以在Objective-C代码中使用。
如果你将`objc`特性应用于一个类或协议,它也会隐式地应用于那个类或协议的成员。对于标记了`objc`特性的类,编译器会隐式地为它的子类添加`objc`特性。标记了`objc`特性的协议不能继承自没有标记`objc`的协议。
@ -74,7 +74,7 @@ class ExampleClass {
`optional`
用该特性修饰协议的属性,方法或下标成员,表示实现这些成员并不需要一致性类型。
用该特性修饰协议的属性,方法或下标成员,表示实现这些成员并不需要一致性类型conforming type
你只能用`optional`特性修饰那些标记了`objc`特性的协议。因此只有类类型可以adopt和comform to那些包含可选成员需求的协议。更多关于如何使用`optional`特性以及如何访问可选协议成员的指导例如当你不确定一个conforming类型是否实现了它们请见[可选协议需求]()。