原文地址: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. jFinal基于maven简单的demo

    JFinal 是基于Java 语言的极速 web 开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java语言所有优势的同时再拥有ruby.py ...

  2. tomcat启动时出现以前删除的项目,导致无法启动

    com.sun.faces.config.ConfigureListener contextInitialized 解决: 进入到你自己的tomcat安装目录:C:\Program Files\Apa ...

  3. lsit集合去重复 顶级表达式

    updateList = updateList.Where((x, i) => updateList.FindIndex(z => z.ID == x.ID) == i).ToList() ...

  4. Windows 环境下 Docker 使用及配置

    原文引用: https://www.cnblogs.com/moashen/p/8067612.html 我们可以使用以下两种方式在Windows环境下使用docker: 1. 直接安装: Docke ...

  5. Beta冲刺-星期五

    这个作业属于哪个课程  <课程的链接>            这个作业要求在哪里 <作业要求的链接> 团队名称 Three cobblers 这个作业的目标 完成项目最后的冲刺 ...

  6. 【SQL】MERGE

    MERGE可以合并多个表中的数据,也可实现多表中数据的同步.使用MERGE语句对表中数据进行有条件的更新和插入.当查找的行存在时,UPDATE更新行中的数据:当查找的行不存在时,INSERT插入数据. ...

  7. Verification之PSL之intro

    1 PSL - Property specification language 1.1 Property - Characteristics of the designs/verification e ...

  8. CNN结构:用于检测的CNN结构进化-结合式方法

    原文链接:何恺明团队提出 Focal Loss,目标检测精度高达39.1AP,打破现有记录     呀 加入Facebook的何凯明继续优化检测CNN网络,arXiv 上发现了何恺明所在 FAIR 团 ...

  9. Matlab atan2

    对Matlab不是很熟悉,在这个Matlab atan2 函数上出现了问题. 百度知道上的解释是这样的: atan2() 区别于 atan() 函数,返回 -pi~+pi 范围的角度: 使用过程中发现 ...

  10. 上传菜品数据&生成点餐二维码

    基础数据上传 在门店助手打开数据上传功能,点击上传到微餐厅3.0,,即将门店本地的基础数据上传到线上. 注意1:上传前,需要在线下系统维护好基础数据 注意2:线下基础数据发生更改时,需要手动在门店助手 ...