[swift]コードで画面を実装するときによく使う部品をモデルで定義してみた


はじめに

ストーリーボードを使わずに画面を実装するとき、ロゴなどのよく使う部品をこのように毎回記述していると、可読性悪くなるしコピペする手間もかかるので嫌だなあと思ってコンポーネント化してみました。

ロゴを実装するとき、毎回同じコードを書くのダルくないですか?

これを毎回書くなんてなんて非効率な・・・

viewController.swift
import UIKit

class ViewController: UIViewController {
    //最初のページ

    var logoLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = UIColor.white

        //ロゴ的な
        logoLabel = UILabel()
        logoLabel.text = "栞の森"
        logoLabel.textColor = UIColor.white
        logoLabel.font = UIFont(name: "Arial", size: 20)
        if #available(iOS 11.0, *) {
          logoLabel.frame = CGRect(x: 20, y: 40, width: self.view.frame.width / 6, height: self.view.frame.height / 20)
        }else{
             logoLabel.frame = CGRect(x: 20, y: 20, width: self.view.frame.width / 6, height: self.view.frame.height / 20)
        }
        let logoBackColor = #colorLiteral(red: 0, green: 0.6670674086, blue: 0.6729698777, alpha: 1)
        logoLabel.backgroundColor = logoBackColor
        self.view.addSubview(logoLabel)

        // Do any additional setup after loading the view, typically from a nib.
    }
}

そこでコンポーネント化して一行でロゴを実装できるようにしよう!

モデルのファイルを作ってロゴをセットする関数を定義する

LogoComponent.swift
import UIKit

class LogoComponent: NSObject {
  static let shared = LogoComponent()

  func setLogo(myView: UIView){
    //ロゴ的な
    let logoLabel = UILabel()
    logoLabel.text = "栞の森"
    logoLabel.textColor = UIColor.white
    logoLabel.font = UIFont(name: "Arial", size: 20)
    if #available(iOS 11.0, *) {
      logoLabel.frame = CGRect(x: 20, y: 40, width: myView.frame.width / 6, height: myView.frame.height / 20)
    }else{
      logoLabel.frame = CGRect(x: 20, y: 20, width: myView.frame.width / 6, height: myView.frame.height / 20)
    }
    let logoBackColor = #colorLiteral(red: 0, green: 0.6670674086, blue: 0.6729698777, alpha: 1)
    logoLabel.backgroundColor = logoBackColor
    myView.addSubview(logoLabel)
  }
}

ViewControllerで使用

ViewController.swift
import UIKit

class ViewController: UIViewController {
    //最初のページ


    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = UIColor.white
        //なんと一行でロゴが実装できます。
        LogoComponent.shared.setLogo(myView: self.view)

        // Do any additional setup after loading the view, typically from a nib.
    }
}

じゃーん

※ちなみにこのやり方だとviewController上でロゴをいじくりたいときに
参照できなそうなので注意

終わりに

プログラミング初心者の戯言なので参考程度に
また、なにかおかしいときは遠慮せずにコメントで指摘してください
そのほうが投稿者は喜びますので