/*协议亮点及注意点:
亮点1:协议可支持属性的写法。{get}或者{get set},不能不写或者只写set
亮点2:协议可以作为一般类型的用途,如函数参数类型,变量类型,数组元素类型等。
注意点
1:协议里面不能写默认实现,扩展协议必须写默认实现。
2:不论是协议本身还是协议的扩展,声明函数的参数都不支持默认值。
3:结构体和枚举遵循协议的时候,要想改变其内部成员的值,需要加mutating关键字,类不需要。
4:required关键字在类中使用,在结构体和枚举里面不能用。标示子类也得有这个构造方法。
*/
protocol 国际足球赛事 {
var 参赛队数量:Int{get}
static var 举办国家:String{get}
init (赛事名称:String)
func 名称() -> String
}
extension 国际足球赛事{
mutating func 获取开幕式时间(年份:Int) -> String {
return "2016-6-11"
}
}
struct 结构体遵循:国际足球赛事 {
var 赛事名称:String
init(赛事名称: String) {
self.赛事名称 = 赛事名称
}
var 参赛队数量: Int{
return 32
}
static var 举办国家: String{
return "法国"
}
func 名称() -> String {
return self.赛事名称
}
}
class 法国欧洲杯:NSObject, 国际足球赛事 {
var 赛事名称:String
required init(赛事名称: String) {
self.赛事名称 = 赛事名称
}
override init() {
self.赛事名称 = "法国2016欧洲杯"
}
var 参赛队数量: Int{
return 24
}
class var 举办国家: String{
get{
return "法国"
}
}
func 名称() -> String {
return self.赛事名称
}
}
func 获取足球赛事的名称(赛事:国际足球赛事) -> String {
return 赛事.名称()
}
var 法国2016 = 法国欧洲杯()
获取足球赛事的名称(法国2016)
今天状态不好,勉强写了这些,感冒了。如果以后再遇到比较有用的地方,再添加吧。。。
参考:http://www.swiftvip.cn/guide/chapter2/22_Protocols.html