最近的项目使用到 协议的扩展,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()
完了.... 就是这么简单....😰
网友评论