2014-10-31 82 views
0

我是在一個視圖控制器工作,當我完成它,我曾在onViewDidLoad以下(我簡化了代碼/變量,但這個想法是一樣的):在哪裏執行視圖控制器「業務邏輯」?

//Show Fields 
    txtField1.hidden = _settings.showField1 == true 
    txtField2.hidden = _settings.userNeedsField2 == true 

    //Display some other text about weather 
    if (_myWeatherService.TheMoonIsFull && _settings.userNeedsField3) 
    { 
     lblField3.text = "Some text about something" 
    } 
    else { 
     txtField3.hidden = true 
    } 

    //Handle Time Stuff 
    if (_settings.UserPreferenceTimeOfDay == true) { 
     if ((current24ClockHourInTheDay >= 5 && current24ClockHourInTheDay <= 18)) 
      { 
      txtField4.hidden = true 
      txtField5.text = "DAY" 
      } 
     else { 
      txtField4.hidden = true 
      txtField5.text = "NIGHT" 
     } 
    else { 
      txtField4.hidden = false 
      txtField5.text = "" 
     } 

,這樣下去對另一20行左右。

基本上我覺得好像有東西可能是最好的視圖控制器(演示相關的決定),但它的一些我在其他視圖控制器重用留下的混合物。還有一些基於用戶對一天中的時間和一天中的幾小時的偏好的邏輯使我對它應該在的位置感到困惑(應該某些服務處理這些決定,所以我可以重用這個代碼)?

謝謝!

+0

我建議看看[MVP](https://開頭恩.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93prepreter)和/或[VIPER](https://www.objc.io/issues/13-architecture/viper/)架構模式。 – werediver 2016-04-21 10:08:29

回答

0

看起來你已經有了一些東西作爲你的_settings對象。考慮在_settings中創建便利方法,以封裝您希望用於修改UI的條件。例如,不是隻有UserPreferenceTimeOfDay的訪問器,而是包裝timeOfDayString的選擇器。

txtField5.text = _settings.timeOfDayString; 
txtField4.hidden = ([txtField5.text length] == 0); 

- (NSString *)timeOfDayString { 
    if (self.UserPreferenceTimeOfDay) { 
    if (self.current24ClockHourInTheDay >= 5 && current24ClockHourInTheDay <= 18) { 
     return @"DAY"; 
    } else { 
     return @"NIGHT"; 
    } 
    } 
    return @""; 
} 

注意:我只是意識到你使用迅速,但我沒有迅速編程高手。不過,理論應該是一樣的。

0

我不能得到這個代碼的主要思想,但是如果你想重複使用一些代碼,你必須把它帶到一個單獨的視圖控制器,當你需要這個功能,你只需實例化控制器,並使用它...在你的情況下,所有的用戶時間首選項可以在UserTimePreferencess.swift文件(視圖控制器)中分開。如果你不希望在viewDidLoad中這麼多的代碼,你可以在其他地方的功能在視圖控制器移動這個代碼,只是叫他們viewDidLoad中

相關問題