最近的項(xiàng)目使用到 協(xié)議的擴(kuò)展,swift真的是將protocol這種語法發(fā)揚(yáng)的更加深入和徹底。下面就來說一下自己在項(xiàng)目中的應(yīng)用吧!
come on !!!
上車,坐穩(wěn)了!??
//往往大家自定義View時(shí)候 經(jīng)常是這種方式載入的
let nib = UINib(nibName: "ChatContentView", bundle: nil)
tableView.register(nib, forCellReuseIdentifier: ChatContentView)
下面介紹這種方式:
//聲明一個(gè)協(xié)議
protocol NibLoadable {
}
//添加的協(xié)議的擴(kuò)展, 限制只有UIview及子類可以遵循這個(gè)協(xié)議喔!
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 協(xié)議
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)
}
}
<想必大家已經(jīng)明白怎么用了吧??? 坐穩(wěn)了! 下方高能~~~~>
使用方式:
fileprivate lazy var chatContentView : ChatContentView = ChatContentView.loadFromNib()
完了.... 就是這么簡(jiǎn)單....??