美文网首页iOS 的那些事儿
Swift3之将类作为参数

Swift3之将类作为参数

作者: 做人要简单 | 来源:发表于2017-08-04 09:01 被阅读15次

    何谓将类名作为参数

    举个栗子

    看这么一个需求:

    一个tableview,其中的cell是nib写的

    步骤:

    1. 定义1个cell和对应的xib
    2. 在ViewController中定义一个Xib加载对应文件,注册xib

    这个时候有一些步骤就是需要定义一个xib的文件名,cell的identitier,但是这两个东西都是字符串,如果一个字母敲错了或者后续业务逻辑/功能有更改,那么当你要修改cell对应的类名时,你就不得不一起修改文件名,字符串的名字,所有引用的名称..等等步骤

    这个时候就要想了,如果将这个Cell实现一个protocol,protocol中有xibName,identifier,同时每个类去实现,然后tableview注册方法中只传类名不就可以了吗,这样以后如果有修改都只在Cell的类内部去写,就不容易出错了

    实现步骤

    定义一个Protocol

    protocol NibCell {
        
        static func nibName() -> String
        
        static func identifier() -> String
        
    }
    

    定义一个Cell

    import UIKit
    
    class 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 UIKit
    
    extension 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 UIKit
    
    
    
    class MyOrderDetailViewCtl: BaseViewCtl,OrderDetailView{
    
        @IBOutlet weak var tableview: UITableView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            tableview.registerNibCell(nibCellType: OrderDetailCell.self)
        }
    
    }
    

    总结

    通过封装,可以直接使用类来作为参数,后续维护时,只要看到继承NibCell协议的类,即可直接找到对应的方法得到nib名称和对应的cell,同样注册时也不怕敲错字符串了

    当然,更多的还是知道了如何使用swift中的将类名作为参数传递的方法

    相关文章

      网友评论

        本文标题:Swift3之将类作为参数

        本文链接:https://www.haomeiwen.com/subject/fmtvlxtx.html