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}
}
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}
}
相关文章推荐
- Swift区间运算符
- Swift IOS中的常用操作(打开网页、发短信、打电话、发邮件)
- Swift语言迈出侵蚀Androidd第一步
- Swift静态方法
- Swift静态属性
- 开源项目链接汇总
- IOS_swift_函数用法
- 浅谈Swift2.0对optional value的安全处理,慎用问号叹号"?!",消除swift项目里的"?!"
- swift可选链和类型转换
- swift学习笔记-3
- Swift 下AFNetworking得使用
- 《swift2.0 官方教程中文版》 第2章-10属性
- Swift中的单例模式
- Swift线程安全详解-概念,三种锁,死锁,Atomic,synchronized
- Swift 使用nib文件做iOS界面,在Ios界面跳转传递数据
- swift 快速奔跑的兔几 本节的内容是:基于文档的应用程序
- Swift:自定义UITableViewCell背景色
- swift中的自动引用计数以及出现的问题
- Swift学习笔记23——访问控制(Access Control)
- swift--调用系统单例实现打电话