2016-06-13 170 views
0

我有點新手程序員,所以我要求別人的意見/建議是什麼,他們會在我在的情況下做的。UIView類有太多委託方法父視圖控制器?

背景

由於約束我正在用來實現「彈出」窗口的庫,我目前正在研究UIView類(我們稱之爲Menu),它創建了UIImagePickers和各種其他視圖控制器(VCs)。然而,由於UIView本身保持在它自己產生的任何VC之上,所以我不得不委託任何VC創建方法到Menu的父VC,以便我可以關閉Menu視圖,創建任何必需的VC,然後(有時)另外恢復Menu視圖。

問題

我目前複製和粘貼數以百計的委託方法行了,有一個Menu視圖任何的UIViewController。這些委託方法對於每個視圖控制器都是相同的,並且在那裏存在,因爲這些方法具有UIViewController特定功能,例如presentViewController。我試圖將父VC作爲參數傳遞給Menu以減少重複代碼的數量,但這似乎是MVC-unkosher。什麼是解決這個問題的好方法?

+0

創建'MainViewController'然後對其進行子類化。在'MainViewController'中實現你需要的所有方法。 – tbilopavlovic

+0

由於您使用的是Swift,因此您可以採用面向協議的編程;創建一個實現所有委託方法的擴展,然後您可以在任何需要它的視圖控制器中簡單地採用此擴展。這與使用子類相似,但更靈活,因爲您可以根據需要採用多個擴展(協議) – Paulw11

回答

0

如果我的理解沒錯,你可以創建一個擴展,這樣

extension SomeClass: ClassesDelegates { 
    //some specific code that all Views will use 
} 
0

我很想通過parentVC作爲參數菜單,以削減重複的量代碼,但這似乎是MVC-unkosher。

這是因爲MVC是一個過時的建築選擇,導致這種情況。這就是「大規模視圖控制器」咆哮,你可能已經注意到這裏和周圍的網絡來自。您的Menu取決於父VC。因此,我們稱parentVC爲依賴關係。現代體系結構的基本原理是依賴注入,它允許您消除引用的重複代碼,並將其與其依賴關係隔離測試Menu。退房

所以,不要害怕使用參數,你的直覺是健全的。擁抱參數的使用,並預示您採用「5美分概念的25美元術語」(請參閱​​第一個鏈接),敏捷設計模式被稱爲依賴注入。對於獎勵冷點,不要使該參數成爲UIViewController。使用Menu要求的訪問來定義一個協議,並使該參數符合所述協議,並向符合該協議的UIViewController添加擴展。這使得其他地方的測試和重用變得更容更重要的是,你將參與協議編程,,這使你擺脫了時髦的Swift設計模式的前沿。那時沒人會叫你一個新手。

相關問題