您的位置:首页 > 移动开发 > Swift

Swift协议 (待继续学习)

2015-11-26 18:35 316 查看
protocol SomeProtocol{

var ID:Int {get} //get
属性是可读的。但是为其实现了setter方法,也不会出错。
var name:String {set get} //set get
属性是可读可写的

func letGoTo()

}

import Foundation

struct SomeClass:SomeProtocol {

var ID:Int
var name:String

func letGoTo() {

print("let go to");
}

}

/*

能在方法或者函数内部改变字段的方法称为Mutating方法。

一般Mutating方法用在值拷贝的地方,。比如结构体。枚举。

Mutating关键字表示该函数允许改变该实例和其属性的类型。

基于引用对象的类class实现协议中的mutating方法时,不用写mutating关键字,结构体,枚举等实现时,要写mutating属性

*/

protocol Tog{

mutating func toggle();
}

enum OneSwitch:Tog{

case off,on

mutating func toggle(){

switch self {
case off:
self = on;
case on:
self = off;
}

}

}

var lightSwitch = OneSwitch.off;
lightSwitch.toggle();
print(lightSwitch); //on

/**

* 使用协议规范构造函数

让实现协议的类必须实现该构造函数
*/

protocol initProtocol{

init(somePara:Int);

}

/**

* 如果要在类中实现一个构造函数协议,必须使用required关键字。不然程序不能编译通过。
*/

class Para: initProtocol {

required init(somePara: Int) {
//to do

}

}

class smallPara: Para {

// fix to do
// required override init(somePara: Int) {
// //to do
//
// }

}

/**

* 委托代理设计模式

【1】在扩展中添加协议成员。也就是在扩展中实现协议。

【2】通过宽展补充协议声明。

当一个类已经实现了协议中的所有要求,缺没有声明时,可以通过扩展来补充协议声明。

extension xx:xxProtocol {}

在以后的代码中,也要注明这个类是遵守协议的,不然的话就是已经实现了所有条件,类型也不会自动转变,因为刚开始就没转变。

【3】集合中的协议类型。

协议类型可以被集合使用,表示集合中的元素均为协议类型。

【4】仅在类中使用协议

协议可以用在类,结构体,枚举中,如果要限制协议只能在类中,可以通过在协议中增加一个class字段来实现继承列表。

*/

/**

* 协议的继承。

协议能够继承一到多个其他协议。语法与类的继承相似。多个协议间用逗号分隔。
*/

/**

* 协议合成
protocol X1{}
protocol X2{}
protocol <X1,X2>{}
*/

/**

* 检验协议的一致性

使用is检验协议的一致性。使用as将协议类型向下转换为其他协议类型。 as?返回一个可选值,当实例实现了协议是,返回该协议类型,否则返回nil

@objc 用来表示协议是可选的。也可以用来表示暴露给OC的代码。此外,@objc型协议只对类有效,因此只能在类中检查协议的一致性。

if let xxx = object as? CC {

}else{

}
*/

/**

* 可选协议要求。

可选协议含有可选成员,在协议中使用optional关键字作为前缀来定义可选成员。

可选协议只有在@objc前缀的协议中生效,且@objc的协议只能被类实现
*/

@objc protocol wahaha{

optional func increment(count:Int) -> Int
optional var number:Int {get}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: