Swift3之将类作为参数
何谓将类名作为参数
举个栗子
看这么一个需求:
一个tableview,其中的cell是nib写的步骤:
- 定义1个cell和对应的xib
- 在ViewController中定义一个Xib加载对应文件,注册xib
这个时候就要想了,如果将这个Cell实现一个protocol,protocol中有xibName,identifier,同时每个类去实现,然后tableview注册方法中只传类名不就可以了吗,这样以后如果有修改都只在Cell的类内部去写,就不容易出错了
实现步骤 定义一个Protocol
protocol NibCell {static func nibName() -> Stringstatic func identifier() -> String}
定义一个Cell
import UIKitclass OrderDetailCell: UITableViewCell,NibCell {static func nibName() -> String {
return "OrderDetailCell"
}static func identifier() -> String {
return "OrderDetailCell"
}override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
tableview写一个通过注册xib来注册cell的扩展方法
import UIKitextension UITableView{func registerNibCell(nibCellType nibCell:NibCell.Type){
let nib = UINib(nibName: nibCell.nibName(), bundle: nil)
self.register(nib, forCellReuseIdentifier: nibCell.identifier())
}}
这里传入了一个NibCell.Type的方法,这样在实际使用的时候,可以直接用对应的nibName获取到实际类(OrderDetailCell)定义的nibName方法的返回值
调用
import UIKitclass MyOrderDetailViewCtl: BaseViewCtl,OrderDetailView{@IBOutlet weak var tableview: UITableView!override func viewDidLoad() {
super.viewDidLoad()
tableview.registerNibCell(nibCellType: OrderDetailCell.self)
}}
总结 通过封装,可以直接使用类来作为参数,后续维护时,只要看到继承NibCell协议的类,即可直接找到对应的方法得到nib名称和对应的cell,同样注册时也不怕敲错字符串了
【Swift3之将类作为参数】当然,更多的还是知道了如何使用swift中的将类名作为参数传递的方法
推荐阅读
- JavaScript之变量、数据类型、数据转换、模板字符串
- requests之网页采集器
- css样式之精灵图与字体图标跟多行显示省略号
- HTTP协议
- Python之循环语句while
- 投稿|19年之后,中国再无音乐节
- 祭6s|祭6s plus文
- 重构指标之如何监控代码圈复杂度
- 肉丸读书——北欧,冰与火之地的寻真之旅(三十三)
- C语言深入探究程序的编译之预处理