1.用分類來對protocol中的方法進行一些默認實現
protocol Callable {
var number:String {get set}
func call()
}
extension Callable{
func call(){
print("撥打了電話\(self.number)")
}
}
struct IPhone : Callable {
var number: String = "110"
}
var iphone = IPhone()
iphone.call() //打印撥打了電話110
2.覆蓋protocol中的默認實現
struct IPhone : Callable {
var number: String = "120"
func call() {
print("用IPhone 8 撥打了電話\(self.number)")
}
}
var iphone = IPhone()
iphone.call() //打印用iphone 8 撥打了電話120
3.一個類中同一個方法有兩份方法實現,你見過嗎?
我們把call的聲明從protocol中去除
protocol Callable {
var number:String {get set}
}
extension Callable{
func call(){
print("撥打了電話\(self.number)")
}
}
struct IPhone : Callable {
var number: String = "119"
func call() {
print("用IPhone 9 撥打了電話\(self.number)")
}
}
var iphone = IPhone()
iphone.call() //打印 用Iphone 9 撥打了電話119
(iphone as Callable).call() //打印 撥打了電話119
4.protocol中的選擇性默認實現,6到不能行
protocol Callable {
var number:String {get set}
func call()
}
extension Callable{
func call(){
print("撥打了電話\(self.number)")
}
}
protocol Netable {
var ip :String {get set}
func net()
}
extension Netable{
func net(){
print("我在上網 ip\(self.ip)")
}
}
extension Callable where Self:Netable{
func call(){
print("我在用網絡打電話 ip \(self.ip)")
}
}
struct IPhone9 : Callable {
var number: String = "110"
}
struct IPhone10 : Callable,Netable {
var number: String = "110"
var ip: String = "110.110.110.110"
}
var iphone9 = IPhone9()
iphone9.call() //打印 撥打了電話110
var iphone10 = IPhone10()
iphone10.call() //打印 我在用網絡打電話 ip 110.110.110.110