UIKit init patterns – The.Swift.Dev.

0/5 No votes

Report this app

Description

[ad_1]

UIViewController init

Really UIViewController intialization is fairly simple. You solely need to override a number of strategies if you wish to be in full management. It depends upon the circumstances which init will probably be known as, in case you are utilizing a storyboard, init(coder) is the one that you’re searching for. If you’re attempting to provoke your controller from an exterior nib file, init(nib,bundle) goes to be known as. You even have a 3rd possibility, you possibly can initialize a controller programmatically from code. Lengthy story quick, as a way to make a sane init course of, it’s important to cope with all these items.

Let me introduce two patterns for UIViewControllers, the primary one is only a widespread init perform that will get known as in each case that would initialize a controller.

import UIKit

class ViewController: UIViewController {

    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        tremendous.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)

        self.initialize()
    }

    required init?(coder aDecoder: NSCoder) {
        tremendous.init(coder: aDecoder)

        self.initialize()
    }

    init() {
        tremendous.init(nibName: nil, bundle: nil)

        self.initialize()
    }

    func initialize() {
        
    }
}

It’s also possible to conceal the init(nib,bundle) and init(coder) strategies from the long run subclasses. You do not have to override init(nib,bundle) and you’ll mark the init(coder) as a comfort initializer. It looks like just a little bit hacky answer and I do not prefer it an excessive amount of, but it surely does the job.

import UIKit

class ViewController: UIViewController {

    init() {
        tremendous.init(nibName: nil, bundle: nil)

        self.initialize()
    }

    required comfort init?(coder aDecoder: NSCoder) {
        self.init(coder: aDecoder)

        self.initialize()
    }

    func initialize() {
        
    }
}

class MyFutureViewController: ViewController {

    override init() {
        tremendous.init()
    }
}
let vc = MyFutureViewController()

UIView init

I normally create a standard initializer for UIViews to make the init course of extra nice. I additionally set the translate autoresizing masks property to false in that initializer technique, as a result of it is 2017 and noone makes use of springs & struts anymore, proper?

import UIKit

class View: UIView {

    init() {
        tremendous.init(body: .zero)

        self.initialize()
    }

    override init(body: CGRect) {
        tremendous.init(body: body)

        self.initialize()
    }

    required init?(coder aDecoder: NSCoder) {
        tremendous.init(coder: aDecoder)

        self.initialize()
    }

    func initialize() {
        self.translatesAutoresizingMaskIntoConstraints = false
    }
}

It is also good to have some autolayout helpers, and if you wish to initialize a view from a nib file, it is actually good to have some comfort technique round.

import UIKit

extension UIView {

    public comfort init(autolayout: Bool) {
        self.init(body: .zero)

        self.translatesAutoresizingMaskIntoConstraints = !autolayout
    }

    public static func create(autolayout: Bool = true) -> Self {
        let _self = self.init()
        let view  = _self as UIView
        view.translatesAutoresizingMaskIntoConstraints = !autolayout
        return _self
    }

    public static func createFromNib(proprietor: Any? = nil, choices: [AnyHashable: Any]? = nil) -> UIView {
        return Bundle.fundamental.loadNibNamed(String(describing: self), proprietor: proprietor, choices: choices)?.final as! UIView
    }
}
let view = UIView(autolayout: true)

Utilizing these snippets, it is very easy to keep up a sane init course of for all of the UIKit lessons, as a result of most of them ared derived from these two “major” lessons.

[ad_2]

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.