2017-08-08 7 views
0

できるだけリーンになるようにこの機能をトリミングするにはどうすればよいですか? ifとelseブロックの唯一の違いは、UiImageViewの高さです。もしtrueならheightは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'は同じもの、つまり現在のView Controllerのビューを参照しています。 – rmaddy

+0

しかし、ビューコントローラには多くのビューがあります。このバナーのすぐ下に別のバナーを作成し、contentModeを.scaleAspectFillにしたい場合、その特定のビューはどのように参照されますか? –

関連する問題