【swift代码精简之道】精简xib加载View

通常Xib加载View的两种方法

let v = Bundle.main.loadNibNamed("OurCustomView", owner: nil, options: nil)?.first as! OurCustomView  

或者是

let nib = UINib(nibName: "OurCustomView", bundle: nil)  
        let v = nib.instantiate(withOwner: nil, options: nil)[0] as! OurCustomView  

一般一个项目可能多达几十个XIB甚至上百个,那么这样的重复代码是否可以精简一下呢?答案是肯定的

首先把这个重复的动作抽到一个协议中去,并在协议的extension中提供默认实现

代码如下

import Foundation  
  
protocol NibloadProtocol {  
      
}  
  
extension NibloadProtocol where Self : UIView{  
    /* 
    static func loadNib(_ nibNmae :String = "") -> Self{ 
        let nib = nibNmae == "" ? "\(self)" : nibNmae 
        return Bundle.main.loadNibNamed(nib, owner: nil, options: nil)?.first as! Self 
    } 
    */  
    static func loadNib(_ nibNmae :String? = nil) -> Self{  
        return Bundle.main.loadNibNamed(nibNmae ?? "\(self)", owner: nil, options: nil)?.first as! Self  
    }  
}  

xib加载view从此变得如此简单

let v = OurCustomView.loadNib()  

只需要继承该协议即可

原来:
class OurCustomView: UIView {

修改后:

class OurCustomView: UIView,NibloadProtocol {  

使用:

let v = OurCustomView.loadNib()  

code of NibloadProtocol.swift

demo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,887评论 1 32
  • 想了好久,也不知该用什么标题,还是用这个吧。与其说是一封信,倒不如说是我的一些小经历,和经历这之后的小看法。 我是...
    学理的伪文青阅读 4,847评论 3 4
  • 批评是一种有效的沟通方法吗? 通常,批评就是指用严厉而直接的语言来指出对方的错误。那什么是沟通?沟通就是双方在一种...
    阿木土阅读 1,063评论 0 0
  • 标签(空格分隔): 编程研发 问题描述 markdown是目前流行且高效的科技写作格式,但是常规的工作中,word...
    马骋阅读 25,517评论 4 20

友情链接更多精彩内容