2017-08-08 59 views
0

如何將此功能調整爲儘可能精簡? if和else塊之間的唯一區別是UiImageView的高度 - 如果爲true,高度爲300,否則爲150.我似乎無法找出在沒有冗餘代碼的情況下重構此函數的最佳方法(如例如)或者一個非常長的函數,看起來很簡單似乎太長了。如何使用if/else函數提供UIImageView屬性?

我離開了粗略的例子,目的明確。

class ProfileViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     banner(profileHasCustomBanner: false) 

    } 

    // banner 
    func banner(profileHasCustomBanner: Bool) { 
     if profileHasCustomBanner == true { 
      let bannerImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 300)) 
      bannerImageView.image = #imageLiteral(resourceName: "the-banner") 
      view.contentMode = .scaleAspectFit 
      view.addSubview(bannerImageView) 
     } else { 
      let bannerImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 150)) 
      bannerImageView.image = #imageLiteral(resourceName: "the-banner") 
      view.contentMode = .scaleAspectFit 
      view.addSubview(bannerImageView) 
     } 
    } 

} 

回答

3

根據條件定義一個height變量。

func banner(profileHasCustomBanner: Bool) { 
    let height: CGFloat = profileHasCustomerBanner ? 300 : 150 
    let bannerImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: height)) 
    bannerImageView.image = #imageLiteral(resourceName: "the-banner") 
    view.contentMode = .scaleAspectFit 
    view.addSubview(bannerImageView) 
} 
+0

@maddy什麼對象是view.contentMode歸因於?當我把它寫成self.view.contentMode時,它會編譯,但不會與任何其他對象一起編譯,那麼這裏的自我究竟是什麼? –

+0

'view'和'self.view'指的是同樣的東西 - 當前視圖控制器的視圖。 – rmaddy

+0

但在視圖控制器中可以有很多視圖。如果我在這個橫幅的下面創建另一個橫幅,並且我希望它的contentMode是.scaleAspectFill,那麼這個特定的視圖是如何引用的? –

相關問題