美文网首页
Swift项目实战 Protocol Extension

Swift项目实战 Protocol Extension

作者: ziyouzhe4 | 来源:发表于2017-03-03 12:09 被阅读166次
    最近的项目使用到 协议的扩展,swift真的是将protocol这种语法发扬的更加深入和彻底。下面就来说一下自己在项目中的应用吧!

    come on !!!

    上车,坐稳了!🙄

    //往往大家自定义View时候 经常是这种方式载入的
      let nib = UINib(nibName: "ChatContentView", bundle: nil)
      tableView.register(nib, forCellReuseIdentifier: ChatContentView)
    
    

    下面介绍这种方式:

    //声明一个协议
    protocol NibLoadable {
    
    }
    //添加的协议的扩展,     限制只有UIview及子类可以遵循这个协议喔!
    extension NibLoadable where Self : UIView {
        static func loadFromNib(_ nibname : String? = nil) -> Self {
            let loadName = nibname == nil ? "\(self)" : nibname!
            return Bundle.main.loadNibNamed(loadName, owner: nil, options: nil)?.first as! Self
        }
    }
    
    //让 自定义的view 遵循  NibLoadable 协议
    class ChatContentView: UIView, NibLoadable {
      
        func insertMsg(_ message : NSAttributedString) {
            messages.append(message)
            tableView.reloadData()
            let indexPath = IndexPath(row: messages.count - 1, section: 0)
            tableView.scrollToRow(at: indexPath, at: .bottom, animated: true)
        }
    }
    

    <想必大家已经明白怎么用了吧?😁 坐稳了! 下方高能~~~~>

    使用方式:

    fileprivate lazy var chatContentView : ChatContentView = ChatContentView.loadFromNib()
    
    

    完了.... 就是这么简单....😰

    相关文章

      网友评论

          本文标题:Swift项目实战 Protocol Extension

          本文链接:https://www.haomeiwen.com/subject/bnwlgttx.html