美文网首页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之将类作为参数

    何谓将类名作为参数 举个栗子 看这么一个需求: 一个tableview,其中的cell是nib写的 步骤: 定义1...

  • Swift3之函数(二)

    Swift3之函数(一) 进阶部分 1.函数参数 -- 外部参数名 2.下滑线 -- _ 3.函数参数 -- 设置...

  • java泛型

    人物素描 名字:泛型特点:区别于形式参数把值作为参数,它可以将类型(类或接口)作为参数,以便通过对相同的代码传入不...

  • springmvc02

    1. 参数绑定之数组 可以直接提交Integer[] 也可以将数组放入包装类中 2. 参数绑定之List List...

  • kotlin语法之将函数作为参数

    一个setOnClickListener的错误 写了个demo,点击事件离奇的不生效,非常困扰。 开始实在是看不出...

  • Python语言学习笔记

    高阶函数:将函数作为参数传递匿名函数lambdaosargparsepsutilsys装饰器:(同类或无类前提)调...

  • 14/13

    模板类作为参数

  • 对象作为函数参数的三种方式及推荐

    对象作为函数参数时有三种情况 一为 普通类作形参直接传递参数 二为引用类对象作为函数参数 三为对象指针作为函数参数...

  • ES6——数组

    数组创建 Array.of() 将参数中所有值作为元素形成数组。 Array.from() 将类数组对象或可迭代对...

  • 正则表达式获取url参数

    1. 将所有参数转化为对象,重复的参数作为数组: 2. 将所有参数转化为对象,重复的参数作为数组:

网友评论

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

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