Swift项目实战 Protocol Extension

最近的项目使用到 协议的扩展,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()

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

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

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,691评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,755评论 4 61
  • 印象中,姥姥就是那样,满脸皱纹,有一些口眼歪斜,一双三寸金莲颤颤巍巍的挪动着步子。大多数时间,她都坐在窗前的床沿上...
    燃烧的向日葵阅读 1,576评论 2 2
  • 看过这一期的朗读者,她带领我到另一个我触不到世界,原来还有这么美好的文字,同时也让我跟着流泪.,有思念的、心酸的、...
    芬菲草1阅读 1,342评论 0 0
  • 余辉落幕照桑榆, 清风醉意百花徐; 桃花十里落寞雨, 春归炸暖入山居。
    月夜秋荷阅读 1,837评论 0 2

友情链接更多精彩内容