美文网首页
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