原文地址: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. PCB 后台自动系统集成与邮件推送实现

    在PCB行业中,工程系统是主要数据生产者,而这些数据不仅仅给自己系统使用呀,我们需要将数据传递到各系统,才达到各系统共同协作的目的. 这里以问答方式对实现方式进行讲解.呵呵呵! 后台自动集成问题解答: ...

  2. PCB C# 连接MongoDB 数据库

    一.C# MongoDB 驱动下载 1.百度网盘:nuget下载地址(V2.7版本) https://pan.baidu.com/s/1VDsVcH1TMrXqhRCZVewZgA 2.VS 中NUg ...

  3. PCB MS CLR 聚合函数 joinString加排序实现

    准备着手,动态列SQL查询,要实现动态列SQL,会运用到聚合函数,而SQL本身聚合函数有限, 无满足此用户任意字段组合变化,再加上工艺流程重复相同工序,如;沉铜1,沉铜2对应工序代码都是相同的 而通常 ...

  4. Pet(dfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=4707 题意:判断距离大于D的点有多少个. 思路: 邻接表建图,dfs每一个点,记录步数. #include &l ...

  5. layui日期输入框

    <div class="layui-form-item">                <label class="layui-form-label& ...

  6. 多文件上传ajax jquery

    jquery的ajaxSubmit()和多文件上传 <%@ page language="java" import="java.util.*" pageE ...

  7. AOP注解形式 整合memcache

    1.首先自定义注解 :添加缓存 @Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documented@Inheritedp ...

  8. Windows Server 2008 R2 搭建DNS服务器(转)

    Windows Server 2008 R2 搭建DNS服务器将本机IP设为首选DNS服务器的地址在dos 下分别输入 nslookup www.mydns.com 和 nslookup 192.16 ...

  9. vue-router 懒加载

    懒加载:也叫延迟加载,即在需要的时候进行加载,按需加载. 那vue 为什么需要懒加载呢? 使用 vue-cli构建的项目,在默认情况下,执行 npm run build  会将所有的 js代码打包为一 ...

  10. LeetCode SQL题目(第一弹)

    LeetCode SQL题目 注意:Leetcode上的SQL编程题都提供了数据表的架构程序,只需要将它贴入本地数据库即可调试自己编写的程序 不管是MS-SQL Server还是MySQL都需要登陆才 ...