SWfit学习5:协议
协议定义协议与定义类,结构,枚举非常相似,Swift 使用 protocol 定义协议: protocol ExampleProtocl{
var simpleDescription:String {get}
func adjust()
}
如果一个类有父类,在任何协议之前列出父类名,后跟一个逗号: protocol ExampleProtocl:subClass,FirstProtocol,SecondProtocol{
var simpleDescription:String {get}
func adjust()
}
属性要求 一个协议可以要求任何符合类型提供一个实例属性或类型属性与一个特定的名称和类型。协议不指定是否该属性应该是一个存储属性或者计算属性–它只指定所需的属性名称和类型。协议还制定是否每个属性必须可获取或可获取和可设置。 protocol ExampleProtocl{
var simpleDescription:String {get}
func adjust()
}
方法要求 协议可以要求指定实例方法和类型方法被一致的类型实现。这些方法被写为协议定义的一部分,跟普通实例和类型方法完全一样,但是没有大括号或方法体。可变参数是允许的,普通方法也遵循同样的规则。 class SimpleClass: ExampleProtocl {
var simpleDescription: String = "A very simple class."
var anotherProperty: Int = 69105
func adjust() {
simpleDescription += "No 100% adjust"
println("simpleDescription = (simpleDescription)")
}
}
var a = SimpleClass()
a.adjust()
Mutating方法要求 有时需要一个方法来修改它属于(或mutate)的实例。对值类型实例方法(即结构和枚举),你将mutating关键字放在方法func关键字之前表明该方法允许修改所属实例和/或实例的任何属性。这个过程描述在实例方法内修改值类型。 protocol Togglable{ mutating func toggle() }
当你实现Togglable协议结构或枚举,实现的结构或枚举可以通过提供同样标记为mutating,名为toggle的方法实现来符合协议。 enum OnOffSwitch:Togglable{
case Off,On
mutating func toggle() {
switch self{
case .Off:
self = On
case .On:
self = Off
}
}
}
var lightSwitch = OnOffSwitch.Off
lightSwitch.toggle()
协议本身实际上没有实现任何功能。尽管如此,你创建的任何协议将成为一个成熟的类型在你的代码中使用。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |