2017-08-08 57 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,那么这个特定的视图是如何引用的? –

相关问题