我正在使用许多自定义实现的UITableViewCell子类。
每个都包含这段代码

    class CustomCell: UITableViewCell {

        static var cellIdentifier : String {
            return (NSStringFromClass(CustomCell.self) as NSString).lastPathComponent.componentsSeparatedByString(".").last!
        }
    }

我遵循的设计原则是,特定单元的cellIdentifier始终与单元类的名称匹配,并且关联的xib文件也具有相同的名称。

CellClassName == CellXibName == CellIdentifier。

我试图避免让字符串常量定义为仅当视图队列需要正确的单元格时,TableView委托在哪里拾取。
当我注册单元格时,我希望改为能够在Class中查询表示单元格标识符的静态 public 属性。
上面的代码给了我。
但是,这显然是重复的,因为我需要在每个CustomCell类中编写它。

您能帮我把它扩展为UITableViewCell吗?
我无法具体弄清楚如何更换
NSStringFromClass(CustomCell.self)

像这样
NSStringFromClass(Something here, that will return the real instance's name
                  as String, even if this code is in the extension :-/ )

最佳答案

更简洁的解决方案:

使用以下代码创建一个名为“UITableViewCellExtension.swift”的新文件:

import UIKit

extension UITableViewCell {

   static var cellIdentifier : String {
       return (NSStringFromClass(self) as NSString).lastPathComponent.componentsSeparatedByString(".").last!
   }
}

因此,这仅替换了您问题中的代码:
NSStringFromClass(CustomCell.self)

与:
NSStringFromClass(self)

其他解决方案:

iOS9 +解决方案
protocol Reusable {
    static var reuseIdentifier: String { get }
}

extension Reusable {
    static var reuseIdentifier: String {
        let mirror = Mirror(reflecting: self)
        return String(mirror.subjectType).stringByReplacingOccurrencesOfString(".Type", withString: "")
    }
}

extension UITableViewCell : Reusable {
}

http://codica.pl/2015/08/11/protocol-extensions-and-reuseidentifier-in-uitableview/启发

希望这可以帮助。

关于ios - 无法快速生成CustomTableViewCell cellIdentifier扩展?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32653227/

10-11 12:08