ios Swift 特性

特性提供了关于声明和类型的更多信息。在Swift中有两类特性,用于修饰声明的以及用于修饰类型的。例如,required特性,当应用于一个类的指定或便利初始化器声明时,表明它的每个子类都必须实现那个初始化器。再比如noreturn特性,当应用于函数或方法类型时,表明该函数或方法不会返回到它的调用者。

通过以下方式指定一个特性:符号@后面跟特性名,如果包含参数,则把参数带上:

@attribute name
@attribute name(attribute arguments)

有些声明特性通过接收参数来指定特性的更多信息以及它是如何修饰一个特定的声明的。这些特性的参数写在小括号内,它们的格式由它们所属的特性来定义。

声明特性

声明特性只能应用于声明。然而,你也可以将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,以及初始化器。下面的例子把ExampleClassenabled属性的getter暴露给Objective-C,名字是isEnabled,而不是它原来的属性名。

@objc
class ExampleClass {
    var enabled: Bool {
    @objc(isEnabled) get {
        // Return the appropriate value
    }
    }
}

optional

用该特性修饰协议的属性,方法或下标成员,表示实现这些成员并不需要一致性类型(conforming type)。

你只能用optional特性修饰那些标记了objc特性的协议。因此,只有类类型可以adopt和comform to那些包含可选成员需求的协议。更多关于如何使用optional特性以及如何访问可选协议成员的指导,例如,当你不确定一个conforming类型是否实现了它们,请见:可选协议需求

required

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

加了该特性的指定初始化器必需显式地实现,而便利初始化器既可显式地实现,也可以在子类实现了超类所有指定初始化器后继承而来(或者当子类使用便利初始化器重写了指定初始化器)。

Interface Builder使用的声明特性

Interface Builder特性是Interface Builder用来与Xcode同步的声明特性。Swift提供了以下的Interface Builder特性:IBActionIBDesignableIBInspectable,以及IBOutlet。这些特性与Objective-C中对应的特性在概念上是相同的。

IBOutletIBInspectable用于修饰一个类的属性声明;IBAction特性用于修饰一个类的方法声明;IBDesignable用于修饰类的声明。

类型特性

类型特性只能用于修饰类型。然而,你也可以用noreturn特性去修饰函数或方法声明。

auto_closure

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

noreturn

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

ios Swift 特性

时间: 2024-08-01 19:07:52

ios Swift 特性的相关文章

ios Swift 国外资源

Swift国外资源汇总(No.1) 此类分享贴暂定每2天更新一次,主要目的是让大家能跟国外开发者们同步,共享知识和共同提高. 对于一些非常有价值的文章,大家有兴趣可以自行翻译(回贴跟我说一声,避免重复劳动,之后发布到论坛或自己blog都可以),我也会将相关链接同步到本贴. 编程思想 Why Objective-C is doomed主要观点:1. Swift跟ObjC互用做的非常好 2. 预计未来会出现Swift-first趋势,官方库和第三方库都会优先考虑Swift实现 3. iOS&OS X

ios Swift ! and ?

swift ?和!之间区别: Swift 引入的最不一样的可能就是 Optional Value 了.在声明时,我们可以通过在类型后面加一个? 来将变量声明为 Optional 的.如果不是 Optional 的变量,那么它就必须有值.而如果没有值的话,我们使用 Optional 并且将它设置为 nil 来表示没有值. //num 不是一个 Int var num: Int? //num 没有值 num = nil //nil //num 有值 num = 3 //{Some 3} Apple

[IOS]swift自定义uicollectionviewcell

刚刚接触swift以及ios,不是很理解有的逻辑,导致某些问题.这里分享一下swift自定义uicollectionviewcell 首先我的viewcontroller不是直接继承uicollectionviewcontroller,而是添加的uicollectionview到我的storyboard, 然后再新建一个swift的文件,让这个swift继承uicollectionviewcell import Foundation class SVGCell :UICollectionView

iOS:Swift界面实例1, 简单界面

Apple推出了基于Objective-C的新语言Swift. 通过实例, 我们可以很好的感受这门新语言 注意事项: 在XCode6_Beta中, 如果有中文, IDE的自动补全功能就会失效, 所以开始调试的时候可以先用英文, 后面再用中文替代. 1. 新建iOS -> Single View Application. 2. 修改AppDelegate.swift文件 1 // 2 // AppDelegate.swift 3 // UIByCode_Swift_1_HelloWorld 4 /

iOS - Swift UISearchController仿微信搜索框

0x01.创建一个UISearchController 如果传入的searchController为nil,则表示搜索的结果在当前控制器中显示,现在我让它在searchVC中显示. // 创建searchResultVC let searchVC = UIViewController() // 设置背景颜色为红色 searchVC.view.backgroundColor = UIColor.red let searchController = UISearchController(search

ios Swift 备忘录

Variables var myInt = 1 var myExplicitInt: Int = 1 // explicit type var x = 1, y = 2, z = 3 // declare multiple integers myExplicitInt = 2 // set to another integer value Constants let myInt = 1 myInt = 2 // compile-time error! Strings var myString =

ios Swift 资源池

Swift入门教程: http://www.cocoachina.com/applenews/devnews/2014/0604/8661.html Swift视频教程: http://www.cocoachina.com/bbs/read.php?tid=204280 Swift官方文档(PDF版): http://www.cocoachina.com/bbs/read.php?tid=204446 Swift官方文档(网页版): https://developer.apple.com/lib

ios Swift 之github

1. 软件类 a) 作者集合 http://nondot.org/sabre/ b) swift for facebook SWIFT是一个易于使用的,基于注解的Java来创建勤俭节约序列化类型和服务库. https://github.com/facebook/swift 2. 游戏类 a)FlappySwift https://github.com/fullstackio/FlappySwift b) 2048 https://github.com/austinzheng/swift-2048

ios swift reduce Method

Swift’s API includes many functions and instance methods that reflect its functional programming heritage. A prime example is called reduce.  You can reduce a collection of values down to just one value, such as calculating the sum of every person’s