Assign xib to the UIView in Swift

前端 未结 9 1955
死守一世寂寞
死守一世寂寞 2020-11-30 20:11

in objective c it can be done in init method by

-(id)init{
    self = [[[NSBundle mainBundle] loadNibNamed:@\"ViewBtnWishList\" owner:0 options:nil]     obje         


        
9条回答
  •  無奈伤痛
    2020-11-30 20:36

    instead of adding an extension to UIView, you could define a protocol and add the implementation to a protocol extension. You can then declare that UIView conforms to the protocol.

    This allows the return type to be Self instead of UIView. So the caller doesn't have to cast to the class.

    Explained here: https://stackoverflow.com/a/33424509/845027

    import UIKit
    
    protocol UIViewLoading {}
    extension UIView : UIViewLoading {}
    
    extension UIViewLoading where Self : UIView {
    
      // note that this method returns an instance of type `Self`, rather than UIView
      static func loadFromNib() -> Self {
        let nibName = "\(self)".characters.split{$0 == "."}.map(String.init).last!
        let nib = UINib(nibName: nibName, bundle: nil)
        return nib.instantiateWithOwner(self, options: nil).first as! Self
      }
    
    }
    

提交回复
热议问题