[英]Swift Complex type in parameter
為了更清楚一點,我正在尋找一種解決方案,供用戶傳遞帶有特定子類和協議的類,即,一個繼承viewController和委托協議的類。 我知道可以創建協議列表,但是找不到正確運行的解決方案。 目前,我使用初始化程序並將viewcontroller用作參數,並在函數內檢查委托,但我希望可以在參數中使用這些類型。
編輯:希望做與此類似的事情
Protocol prot:Delegate{}
class cla:ViewController{}
class impl{
init(mainUI: cla, prot){
do things
}
}
That way back in the main view controller I can do something like this
class viewController: cla, prot{
var view:impl
override func loadView() {
//Attach to Screen
view = impl(mainUI: self);
}
}
他們還有更多的事情發生,但這是唯一真正相關的部分。 當前,如果類未繼承正確的協議,我將使用初始化程序來使其失敗
您可以創建一個虛擬類型來代表您的需求。 Typealias在這種情況下不起作用,但這可能是:
class DummyClass: MyViewController, MyDelegateProtocol {}
func needsRequiredClass(input: DummyClass) {...}
MyViewController
和MyDelegateProtocol
是您提到的超類和委托。 DummyClass
將有一個空的實現。
然后,使您的特定類成為DummyClass
子類:
class TestClass: DummyClass {...}
您可以通過該新課程:
let test = TestClass()
self.needsRequiredClass(test)
您問錯了問題。 換句話說,嘗試嚴重設計錯誤。
視圖不應該知道,它的代表是一個UIViewController或一個子類。
委托應該是遵守(采用)特定委托協議的任何類。
視圖僅應委派特定的職責。 這些責任中的每一項都必須由協議方法或屬性來描述。
如果您更詳細地說明問題(為什么您認為需要直接訪問UIView
中的UIViewController
的整個定義),我們可以幫助您避免此錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.