How to implement two inits with same content without code duplication in Swift?

后端 未结 7 1162
旧时难觅i
旧时难觅i 2020-12-01 00:10

Assume a class that is derived from UIView as follows:

class MyView: UIView {
    var myImageView: UIImageView

    init(frame: CGRect) {
               


        
7条回答
  •  粉色の甜心
    2020-12-01 00:41

    Yet another option using a static method (added 'otherView' to highlight scalability)

    class MyView: UIView {
    
        var myImageView: UIImageView
        var otherView: UIView
    
        override init(frame: CGRect) {
            (myImageView,otherView) = MyView.commonInit()
            super.init(frame: frame)
        }
    
        required init(coder aDecoder: NSCoder) {
            (myImageView, otherView) = MyView.commonInit()
            super.init(coder: aDecoder)!
        }
    
        private static func commonInit() -> (UIImageView, UIView) {
            //do whatever initialization stuff is required here
            let someImageView = UIImageView(frame: CGRectZero)
            someImageView.contentMode = UIViewContentMode.ScaleAspectFill
            let someView = UIView(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
            return (someImageView, someView)
        }
    }
    

提交回复
热议问题