原文地址:http://www.cocoachina.com/newbie/basic/2014/0612/8801.html

特性提供了关于声明和类型的很多其它信息。在Swift中有两类特性,用于修饰声明的以及用于修饰类型的。

比如,required特性,当应用于一个类的指定或便利初始化器声明时。表明它的每一个子类都必须实现那个初始化器。再比方noreturn特性,当应用于函数或方法类型时,表明该函数或方法不会返回到它的调用者。

 
通过下面方式指定一个特性:符号@后面跟特性名,假设包括參数,则把參数带上:
 
有些声明特性通过接收參数来指定特性的很多其它信息以及它是怎样修饰一个特定的声明的。这些特性的參数写在小括号内,它们的格式由它们所属的特性来定义。
 
声明特性

声明特性仅仅能应用于声明。

然而。你也能够将noreturn特性应用于函数或方法类型。

 
assignment
该特性用于修饰重载了复合赋值运算符的函数。重载了复合赋值运算符的函数必需将它们的初始输入參数标记为inout。

怎样使用assignment特性的一个样例。请见:复合赋值运算符。

 
class_protocol
该特性用于修饰一个协议表明该协议仅仅能被类类型採用[待改:adopted]。
 
假设你用objc特性修饰一个协议,class_protocol特性就会隐式地应用到该协议,因此无需显式地用class_protocol特性标记该协议。
 
exported
该特性用于修饰导入声明。以此来导出已导入的模块,子模块,或当前模块的声明。假设还有一个模块导入了当前模块。那么那个模块能够訪问当前模块的导出项。
 
final
该特性用于修饰一个类或类中的属性,方法,以及下标成员。

假设用它修饰一个类,那么这个类则不能被继承。假设用它修饰类中的属性,方法或下标,则表示在子类中,它们不能被重写。

 
lazy
该特性用于修饰类或结构体中的存储型变量属性。表示该属性的初始值最多仅仅被计算和存储一次,且发生在第一次訪问它时。怎样使用lazy特性的一个样例,请见:惰性存储型属性。

 
noreturn
该特性用于修饰函数或方法声明,表明该函数或方法的相应类型,T,是@noreturn T。

你能够用这个特性修饰函数或方法的类型,这样一来,函数或方法就不会返回到它的调用者中去。

 
对于一个没实用noreturn特性标记的函数或方法,你能够将它重写(override)为用该特性标记的。相反。对于一个已经用noreturn特性标记的函数或方法,你则不能够将它重写为没使用该特性标记的。同样的规则试用于当你在一个comforming类型中实现一个协议方法时。

 
NSCopying
该特性用于修饰一个类的存储型变量属性。该特性将使属性的setter与属性值的一个副本合成,由copyWithZone方法返回。而不是属性本身的值。该属性的类型必需遵循NSCopying协议。

 
NSCopying特性的行为与Objective-C中的copy特性相似。

 
NSManaged
该特性用于修饰NSManagedObject子类中的存储型变量属性,表明属性的存储和实现由Core Data在执行时基于相关实体描写叙述动态提供。
 
objc
该特性用于修饰随意能够在Objective-C中表示的声明,比方。非嵌套类,协议,类和协议中的属性和方法(包括getter和setter),初始化器。析构器,下面下标。objc特性告诉编译器该声明能够在Objective-C代码中使用。

 
假设你将objc特性应用于一个类或协议。它也会隐式地应用于那个类或协议的成员。对于标记了objc特性的类,编译器会隐式地为它的子类加入objc特性。标记了objc特性的协议不能继承自没有标记objc的协议。
 
objc特性有一个可选的參数。由标记符组成。当你想把objc所修饰的实体以一个不同的名字暴露给Objective-C,你就能够使用这个特性參数。你能够使用这个參数来命名类。协议。方法,getters,setters,以及初始化器。以下的样例把ExampleClass中enabled属性的getter暴露给Objective-C,名字是isEnabled,而不是它原来的属性名。
  1. @objc
  2. class ExampleClass {
  3. var enabled: Bool {
  4. @objc(isEnabled) get {
  5. // Return the appropriate value
  6. }
  7. }
  8. }
optional
用该特性修饰协议的属性,方法或下标成员。表示实现这些成员并不须要一致性类型(conforming type)。

 
你仅仅能用optional特性修饰那些标记了objc特性的协议。因此。仅仅有类类型能够adopt和comform to那些包括可选成员需求的协议。

很多其它关于怎样使用optional特性以及怎样訪问可选协议成员的指导,比如,当你不确定一个conforming类型是否实现了它们。请见:可选协议需求。

 
required
用该特性修饰一个类的指定或便利初始化器。表示该类的全部子类都必需实现该初始化器。

 
加了该特性的指定初始化器必需显式地实现,而便利初始化器既可显式地实现,也能够在子类实现了超类全部指定初始化器后继承而来(或者当子类使用便利初始化器重写了指定初始化器)。
 
Interface Builder使用的声明特性
Interface Builder特性是Interface Builder用来与Xcode同步的声明特性。Swift提供了下面的Interface Builder特性:IBAction。IBDesignable,IBInspectable,以及IBOutlet。这些特性与Objective-C中相应的特性在概念上是同样的。
 
IBOutlet和IBInspectable用于修饰一个类的属性声明;IBAction特性用于修饰一个类的方法声明;IBDesignable用于修饰类的声明。

 
 
类型特性

类型特性仅仅能用于修饰类型。

然而,你也能够用noreturn特性去修饰函数或方法声明。

 
auto_closure
这个特性通过自己主动地将表达式封闭到一个无參数闭包中来延迟表达式的求值。使用该特性修饰无參的函数或方法类型,返回表达式的类型。

一个怎样使用auto_closure特性的样例,见函数类型

 
noreturn
该特性用于修饰函数或方法的类型。表明该函数或方法不会返回到它的调用者中去。你也能够用它标记函数或方法的声明。表示函数或方法的对应类型,T,是@noreturn T。
 

特性的语法:

attribute → attribute-name­attribute-argument-clause­opt­

attribute-name → identifier­

attribute-argument-clause → balanced-tokens­opt­

attributes → attribute­attributes­opt­

balanced-tokens → balanced-token­balanced-tokens­opt­

balanced-token → balanced-tokens­opt­

balanced-token → balanced-tokens­opt­

balanced-token → balanced-tokens­opt­

balanced-token → Any
identifier, keyword, literal, or operator

balanced-token → Any
punctuation except ,
or 

swift 声明特性 类型特性的更多相关文章

  1. iOS开发——新特性OC篇&Swift 2.0新特性

    Swift 2.0新特性     转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度 ...

  2. Python3新特性 类型注解 以及 点点点

    Python3新特性 类型注解 以及 点点点 ... Python3 的新特性 Python 是一种动态语言,变量以及函数的参数是 不区分类型 的 在 函数中使用类型注解 相当于 给 形参的 类型 设 ...

  3. swift声明属性为某个类型同时遵循某协议

    swift声明属性为某个类型同时遵循某协议 var instanse:(协议A & 类B)

  4. TypeScript01 编译环境的搭建、字符串特性、类型特性

    知识准备:JavaScript满足ES5前端规范.TypeScript满足ES6前端规范 1 TypeScript开发环境 TypeScript代码不能直接被浏览器识别,必须先转换成JS代码:通常是利 ...

  5. c++新特性实验(2)类型特性

    1. 基本类型 1.1 增加 long long long long int signed long long signed long long int unsigned long long unsi ...

  6. Swift 语言附注 类型

    本页包括内容: 类型注解(Type Annotation) 类型标识符(Type Identifier) 元组类型(Tuple Type) 函数类型(Function Type) 数组类型(Array ...

  7. Swift语言之类型方法

    Swift语言有很多特性,其中之一就是类型方法,相对于其他比较流行的编程语言(C#.Java),在Swift中类型方法最大的特征在于它的可继承性,我们举个例子说明: 俗话说,龙生龙凤生凤老鼠生儿会打洞 ...

  8. [C#]Attribute特性(2)——方法的特性及特性参数

    上篇博文[C#]Attribute特性介绍了特性的定义,类的特性,字段的特性,这篇博文将介绍方法的特性及特性参数相关概念. 3.方法的特性 之所以将这部分单列出来进行讨论,是因为对方法的特性查询的反射 ...

  9. Swift声明参考

    一条声明可以在你的程序里引入新的名字和构造.举例来说,你可以使用声明来引入函数和方法,变量和常量,或者来定义 新的命名好的枚举,结构,类和协议类型.你也可以使用一条声明来延长一个已经存在的命名好的类型 ...

随机推荐

  1. ride关键字

    定义变量:set variable 打印 :log 列表:create list 字符转数字型:evaluate 随机数:evaluate random.randint 日志截图:先导入screens ...

  2. 省市区县的sql语句——城市

    /*SQLyog v10.2 MySQL - 5.5.48 : Database - 省市县****************************************************** ...

  3. php正则表达式应用

    正则表达式 1.替换“/\d/”,“#”,$str:正则表达式\d 数字,替换为#,字符串 $str = "2hello 5li 6lei"; echo preg_replace( ...

  4. Hadoop2.6.5高可用集群搭建

    软件环境: linux系统: CentOS6.7 Hadoop版本: 2.6.5 zookeeper版本: 3.4.8 主机配置: 一共m1, m2, m3, m4, m5这五部机, 每部主机的用户名 ...

  5. WIN10 64位下VS2015 C#直接添加 halcon 12导出的CS文件实现视觉检测

    C# halcon 12 联合编程的 实例 1.先调试好halcon程序,我以读取图片的程序为例.

  6. 移动端自动化测试-WTF Appium

    手机App分为两大类,原生App(Native App)和混合APP(Hybrid App) 原生App(Native App) 原生App实际就是我们所常见的传统App开发模式,云端数据存储+App ...

  7. 【剑指Offer】17、树的子结构

      题目描述:   输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构)   解题思路:   要查找树A中是否存在和树B结构一样的子树,我们可以分为两步:第一步, ...

  8. POJ2431-Expedition【优先队列+贪心】

    题目大意:卡车每走一公里就消耗一单位的汽油,初始时给你p单位油,你要到达l距离的终点.其中路上有n个补给点可以加油,并且油箱容量无限大,问你最少可以停车几次. 思路:因为油箱无限大,所以我们可以这么认 ...

  9. [SDFZOJ]1069:树上统计

    神题...std丑的不行. 我们可以发现i->i+1的边被覆盖过i×(n-i)次. 因为以1->i为左端点,以i+1->n的为右端点,i->i+1都将被覆盖这么多次. 然后从1 ...

  10. MySQL高级 之 explain执行计划详解

    使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈. explain执行计划包含的信息 其中最重要的字段为:i ...