Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

CustomViewをコードで実装する

はじめに

CustomViewをコードで実装した際に、initメソッドに関しての理解が曖昧でしたので備忘録として投稿します。

動作環境

【Xcode】Version 12.0.1
【Swift】Version 5.3

実装コード

CustomView.swift
import UIKit

class CustomView: UIView {

    var imageView: UIImageView!

    // 詳細説明①
    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }

    // 詳細説明②
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }

    private func setup(){
        let iWidth: CGFloat = 200
        let iHeight: CGFloat = 200
        let posX: CGFloat = (self.frame.width - iWidth)/2
        let posY: CGFloat = (self.frame.height - iHeight)/2

        imageView = UIImageView(frame: CGRect(x: posX, y: posY, width: iWidth, height: iHeight))
        imageView.image = UIImage(named: "hoge")
        self.addSubview(imageView)
    }

}
ViewController.swift
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let customView = CustomView()
        customView.frame = CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height)
        self.view.addSubview(customView)
    }
}

詳細説明①

override init(frame: CGRect) {
    super.init(frame: frame)
}
  • 通常のイニシャライザ(requiredが付かないイニシャライザ)はサブクラスで実装しても実装しなくても良いが、初期化などを行う場合はoverrideを必ず付ける必要があります。

詳細説明②

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}
  • 必須のイニシャライザ(requiredが付いてるイニシャライザ)はサブクラスで絶対に実装しないといけません。
  • init?(coder aDecoder: NSCoder)のイニシャライザはNSCodingプロトコルで定義されており、それがUIViewクラスで実装されているので、サブクラスでも実装する必要があるということになります。

参考

0xTJtrFMRTbrbho
転職に向けてSwift学習している社会人です。 案件の依頼引き受けます!TwitterにてDMお待ちしております。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away