๐ŸŒฑ SeSAC

[SeSAC] 220819 TIL

taeeekki 2022. 8. 20. 13:41

BaseViewController

์‚ฌ์‹ค ์ด์ „์—๋„ BaseViewController๋ฅผ ๋งŒ๋“ค์–ด์„œ ์„œ๋ธŒํด๋ž˜์‹ฑํ•˜๋Š” ์ž‘์—…์„ ํ•ด์™”์—ˆ๋Š”๋ฐ ์–ด๋А ์ˆœ๊ฐ„ ํ”„๋กœํ† ์ฝœ์„ ์“ฐ๋Š” ๊ฒŒ ์ข‹๋‹ค๋Š” ์ฃผ๋ณ€ ๋ง์ด ๋งŽ์ด ๋“ค๋ ธ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๋Ÿฐ๊ฐ€๋ผ๋Š” ์ƒ๊ฐ์„ ๋‚˜๋„ ๋ฉ๋‹ฌ์•„ ํ–ˆ์—ˆ๋Š”๋ฐ, ์ƒ์†์„ ํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ๋ฌด์ž‘์ • ๋‚˜์˜๋‹ค๋Š” ์ƒ๊ฐ์„ ํ•˜๋Š” ๊ฒƒ์ด ์˜คํžˆ๋ ค ์ž˜๋ชป๋˜์ง€ ์•Š์•˜๋‚˜๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ์–ด์ฐจํ”ผ ์ƒ์†์€ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋งŒ ํ•  ์ˆ˜ ์žˆ๊ณ , ๋ชจ๋“  ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์“ฐ์—ฌ์•ผ ํ•˜๋Š” ๋‚ด์šฉ์ด๋ผ๋ฉด ํ•˜๋‚˜์˜ BaseViewController๋กœ ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚ซ์ง€ ์•Š๋‚˜ ์ƒ๊ฐ์ด ๋“ ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ๊ทธ ์™ธ์ ์ธ ๊ฒƒ๋“ค์„ ํ”„๋กœํ† ์ฝœ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋” ๋งž๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์ƒ์†๊ณผ ํ•ฉ์„ฑ์„ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ ์ ˆํ•œ ๊ฒƒ ๊ฐ™์€๋ฐ ๊ทธ ์ •๋„๋ฅผ ์ฐพ๊ธฐ๊ฐ€ ์ •๋ง ์–ด๋ ค์šด ๊ฒƒ ๊ฐ™๋‹ค.

 


 

BaseView

  • View๋ฅผ ๋งŒ๋“ค ๋•Œ์— ๊ณตํ†ต์ ์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ์ž‘์—…์„ ๋ชจ์•„๋†“๊ณ  ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ์•„์ด๋””์–ด
  • ๋ทฐ ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•˜๊ณ  ๋“ฑ๋กํ•˜๋Š” ์ž‘์—…์„ BaseView๋ฅผ ์ƒ์†๋ฐ›์€ ์„œ๋ธŒํด๋ž˜์Šค์—์„œ ์ง„ํ–‰
class BaseView: UIView {

    override init(frame: CGRect) {
        super.init(frame: frame)
        
        configureUI()
        setConstraints()
    }

    @available(*, unavailable)
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented") // ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜
    }
    
    func configureUI() {}
    func setConstraints() {}
}

 


 

LoadView

์ฝ”๋“œ ๋ฒ ์ด์Šค๋กœ ์ž‘์—…์„ ํ•  ๊ฒฝ์šฐ Controller์˜ ์—ญํ• , ๋ถ€๋‹ด์„ ์ข€ ๋” ๋œ์–ด์ฃผ๊ธฐ ์œ„ํ•ด UI ๊ฐ์ฒด๋ฅผ ํ•œ ๋ฒˆ ๋” ๋œ์–ด๋‚ด๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•ด์„œ RootView๋ฅผ ๊ต์ฒดํ•ด์ฃผ๋Š” ์ž‘์—…์„ ํ•ด์ฃผ๋Š” ๊ฒƒ์ธ๋ฐ RootView๋ฅผ ๊ฐˆ์•„ ๋ผ์›Œ์ฃผ๋Š” ์ž‘์—…์„ LoadView ๋ฉ”์„œ๋“œ์—์„œ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • UIViewController์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ
  • viewDidLoad์ „์— ํ˜ธ์ถœ
  • ์›๋ž˜๋Š” ViewController๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” View๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ nil ๊ฐ’์ด๋‹ค.
  • loadView์—์„œ View๋ฅผ ์ฑ„์›Œ์ฃผ๋Š” ์ž‘์—…์„ ํ•œ๋‹ค. ์Šคํ† ๋ฆฌ๋ณด๋“œ์˜ ๊ฒฝ์šฐ๋Š” ์ž๋™์œผ๋กœ loadView๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , View๋ฅผ ๊ฐ€์ง€๊ณ  ์™€์„œ ๋ผ์›Œ์ค€๋‹ค.
  • super.loadView()์˜ ํ˜ธ์ถœ์€ ํ•˜์ง€๋ง์•„์•ผ ํ•œ๋‹ค.
override func loadView() {
    print(self.view!) // ์‹ ๊ธฐํ•˜๋‹ค.. ์—ฌ๊ธฐ์„œ print์ฐ์œผ๋ฉด ํ˜ธ์ถœ์ด ์•ˆ ๋จ
    self.view = WriteView()
//        print(self.view)
}

self.view์— view๋ฅผ ํ• ๋‹นํ•˜์ง€ ์•Š๊ณ , self.view๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด loadView ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฌดํ•œ ํ˜ธ์ถœ๋œ๋‹ค.

 


 

Notification

  • ์‹ ํ˜ธ๋ฅผ ์˜๋Š” ์ชฝ, ์‹ ํ˜ธ๋ฅผ ๋ฐ›๋Š” ์ชฝ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ƒ๊ฐ
  • ์œ ํŠœ๋ฒ„์™€ ๊ตฌ๋…์ž์˜ ๊ด€๊ณ„๋กœ ์ƒ๊ฐํ•ด๋„ ์ข‹๋‹ค.
  • ์›ํ•˜๋Š” value๋Š” userInfo(๋”•์…”๋„ˆ๋ฆฌ)๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ •๋ฐฉํ–ฅ ์‹œ์ ์—๋Š” ๋…ธํ‹ฐ๊ฐ€ ์ •์ƒ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค. (๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€ ์žˆ์ง€ ์•Š์€ ์ธ์Šคํ„ด์Šค์— ์‹ ํ˜ธ๋ฅผ ์˜๊ธฐ ๋•Œ๋ฌธ)
  • ๊ณ„์ธต์— ์ƒ๊ด€์—†์ด ์‹ ํ˜ธ๋ฅผ ์ „๋‹ฌ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
NotificationCenter.default.post(
    name: Notification.Name("Post"),
    object: nil,
    userInfo: ["name": nameTextField.text!, "value": 123456]
)
NotificationCenter.default.addObserver(
    self,
    selector: #selector(action),
    name: Notification.Name("Post"),
    object: nil
)

@objc func action(_ notification: NSNotification) {
    if let name = notification.userInfo?["name"] as? String {
        self.nameButton.setTitle(name, for: .normal)
    }
}