协议定义:
// 协议定义通过关键字protocol
protocol SomeProtocol {
}
protocol SomeProtocol2 :SomeProtocol{
}
// 协议可以继承一个或者多个协议
protocol SomeProtocol3 :SomeProtocol,SomeProtocol2{
}
// 结构体实现协议
struct SomeStructure:SomeProtocol,SomeProtocol2 {
}
class SomeSuperclass{
}
//协议一般都写在父类后面
class SomeClass:SomeSuperclass,SomeProtocol,SomeProtocol2 {
}
属性:
protocol ClassProtocol {
static var present:Bool{get set} // 要求该属性可读可写,并且是静态的
var subject :String{get} // 要求该属性可读
var stname :String{get set} // 要求该属性可读可写
}
class MyClass :ClassProtocol {
static var present =false // 如果没有实现协议的属性要求,会直接报错
var subject :String="ss"
var stname ="Class"
}
方法:
普通方法:
protocol RandomNumber {
func random()-> Double// 实现该协议,需要实现该方法
}
class LinearCongruential :RandomNumber {
// 实现协议方法
func random()-> Double{
return 5.0
}
}
协议作为属性:
protocol RanDom {
func random() ->Double
}
class MyClass :RanDom{
func random() ->Double{
return5.0;
}
}
func test(rdom:RanDom) { //协议作为函数属性
print(rdom.random())
}
var clss =MyClass()
test(rdom:clss)
扩展:
扩展是给已经存在的类(class),结构体(structure),枚举类型(enumeration)和协议(protocol)增加新的功能。类似Objective-C中的Category,不同的是,Extension没有名字。扩展可以做以下事情:
增加计算实例属性和计算类型属性
定义实例方法和类型方法
提供新的初始化器
定义下标
定义和使用新的内置类型
让一个存在的类型服从一个协议
注:扩展可以增加新的功能,但是不能覆盖已有的功能
给存在的类型增加扩展:
protocol Custom {
var describe:String{get}
}
extension Int:Custom{
var describe:String{
return String(self)
}
}
闭包:
定义:var eatTomatos = { (a: Int, b: Int) -> Int in return a + b }
调用:print(eatTomatos(2,3)) //输出5