/*
作用:
1、Protocol(协议)用于统一方法和属性的名称,而不实现任何功能。
2、协议能够被类,枚举,结构体实现,满足协议要求的类型被称为协议的遵循者。
3、遵循者需要提供协议指定的成员,如属性,方法,操作符,下标等
语法:
protocol 协议名 {
}
struct 类型:协议一,协议二 {
class 类型:父类,协议一,协议二 {
}
说明:
1、协议本身不实现任何功能,但你可以将它当做类型来使用
2、协议也可以继承一个或多个(用逗号隔开)其它协议
(协议前添加@objc说明是可选的,属性或方法前添加optional)
*/
@objc protocol AddProtocol {
//只读
var a:Int {get}
//可读可写
var b:Int {getset}
//普通方法
func add() ->Int
@objcoptional var c:Int {get}
@objcoptional func optionalFunc()
}
protocol SubProcotol {
func sub()->Int
}
class Calculate: @H_721_301@NSObject,AddProtocol,SubProcotol {
var a:Int {
return100
}
var b:Int = 0
func add() ->Int {
returna+b
}
func sub() ->Int {
returna-b
}
}
var calc = Calculate()
//calc.a = 100
calc.b =200
print(calc.add())
print(calc.sub())
let c2 = calcas AddProtocol
//这样调用会前置解包,解包失败会崩溃
//c2.optionalFunc!()
//这样调用会隐式解包,解包失败返回nil
c2.optionalFunc?()