Swift4からNSNib
を生成するためにXib(.nib)の名前をNSNib.Name
という特別なtypeにする必要が出来ました。
面倒くさいのでExtensionを作りました。
extension NSNib.Name {
static func nibName<Subject>(_ type: Subject) -> NSNib.Name {
return NSNib.Name(rawValue: String(describing: type))
}
}
例えばCellItem
クラスが使うクラスと同名のCellItem.xib(nib)
をロードするときは、
let nib = NSNib(nibNamed: .nibName(CellItem.self), bundle: nil)
これでOKです。
追加
protocolも作りました。
protocol NibLoadable {
static var nibName: NSNib.Name { get }
}
extension NibLoadable {
static var nibName: NSNib.Name {
return .nibName(for: self)
}
}
これで、
extension CellItem: NibLoadable {}
とするだけで
let nib = NSNib(nibNamed: CellItem.nibName, bundle: nil)
とできるようになります。