我想重寫協議擴展的實例方法,並且遇到了一些麻煩。如何在Swift中重寫協議擴展的實例方法?
對於上下文,我正在製作一個帶有許多不同UICollectionViews的iOS應用程序。這些視圖從不同的數據庫獲取數據(需要不同的回調函數)並且佈局非常不同。因爲(數據庫,佈局)的任何組合都是可能的,所以很難在沒有大量代碼重複的情況下創建一個不錯的OOP類層次結構。
我的想法是將佈局函數(主要是UICollectionViewDelegateFlowLayout協議中定義的那些函數)放入協議擴展中,這樣我就可以用一個擴展來實現所有相關佈局函數的協議來修飾給定的UICollectionView子類,但是我這很困難。問題的實質包含在下面的代碼中。
class Base {
func speak(){
print("Base")
}
}
class SubA: Base, ProtocolA {}
class SubB: Base, MyProtocolB {}
protocol MyProtocolA{
func speak()
}
protocol MyProtocolB{
func speak()
}
extension MyProtocolA{
func speak(){
print("A")
}
}
extension MyProtocolA{
func speak(){
print("B")
}
}
let suba = SubA()
suba.speak() // prints "Base", I want it to print "A"
let subb = SubB()
subb.speak() // prints "Base", I want it to print "B"
想法?
「我的想法是將佈局函數(主要是在UICollectionViewDelegateFlowLayout協議中定義的函數)放入協議擴展中」忘記了這個想法。 Objective-C永遠不會從協議擴展中調用實現,因爲Objective-C不能查看協議擴展。它是一個Swift專用功能。 – matt
@matt這個問題不是關於Obj-C,不是嗎? –
@TimVermeulen是的。它是關於Swift協議擴展中的Objective-C委託方法。 – matt