1.结构体是只能实现协议,不能继承类或者结构体,也不能被类或者结构体继承
2.协议是可以补充的,extension中的实现方法是默认实现,其实就是相当于OC里面的可选择实现方法
在extension中没有实现的方法只要是实现了这个协议就必须实现其方法
3.协议里面的方法在类里面没有实现的(可选择实现的协议方法),在类的扩展里面可以实现,但是必须是类本身没有实现,但是类是必须实现必实现的方法,不能放到类扩展里面去实现
4.结构体的extension和类的extension相似
//
// Pizzeria.swift
// swift_MVVM
//
// Created by QF-001 on 2017/2/24.
// Copyright © 2017年 QF-001. All rights reserved.
//
import UIKit
protocol ProtocolTemp {
func requiredMethod(_ ingredient:[String])
func optionalMethod()
func temp()
}
extension ProtocolTemp{
func optionalMethod(){
return requiredMethod(["tomato","mozzarella"])
}
func temp(){
print("这是协议的默认实现")
}
}
struct Lombardis:ProtocolTemp{
internal func requiredMethod(_ ingredient: [String]) {
print(ingredient)
}
func makeMargherita(){
return requiredMethod(["tomato","mozzarella","basil"])
}
}
extension Lombardis{
func temp() {
print("测试结构体实现扩展")
}
}
class ProtocolTempSon: ProtocolTemp {
internal func requiredMethod(_ ingredient: [String]) {
print(ingredient)
}
func optionalMethod(){
return requiredMethod(["tomato","mozzarella","basil", "son"])
}
}
extension ProtocolTempSon{
func temp() {
print( "类里面没有实现的,在类的扩展里面可以实现" )
}
}
class ProtocolTempGrandSon: ProtocolTempSon {
override func optionalMethod() {
return requiredMethod(["tomato","mozzarella","basil", "son","grandSon"])
}
}
下面是声明实现:
let temp1:ProtocolTemp = Lombardis()
let temp2:ProtocolTemp = Lombardis()
let temp3:ProtocolTemp = ProtocolTempSon()
let temp4:ProtocolTemp = ProtocolTempGrandSon()
temp1.optionalMethod()
temp2.optionalMethod()
temp3.optionalMethod()
temp4.optionalMethod()
temp1.temp()
temp2.temp()
temp3.temp()
temp4.temp()
运行结果:
["tomato", "mozzarella"]
["tomato", "mozzarella"]
["tomato", "mozzarella", "basil", "son"]
["tomato", "mozzarella", "basil", "son", "grandSon"]
测试结构体实现扩展
测试结构体实现扩展
类里面没有实现的,在类的扩展里面可以实现
类里面没有实现的,在类的扩展里面可以实现
网友评论