创建了一个简单的扩展,允许我为UITableViewCell提供一个标识符,所以我可以命名它,就像Apple使用Notification.Name一样:
npm install myapp
cd myapp
npm start
在此之后我的想法是在UIViewController上添加这段代码,这样我就可以组织我的单元格标识符了:
// UITableViewCellExtension.swift
extension UITableViewCell {
public struct Identifier: RawRepresentable {
public typealias RawValue = String
public var rawValue: RawValue {
return self._rawValue
}
private var _rawValue: RawValue
public init(rawValue: RawValue) {
self._rawValue = rawValue
}
public init(_ rawValue: RawValue) {
self._rawValue = rawValue
}
}
}
但是我收到了以下错误:
'Identifier'不是'UITableViewCell'类型的成员
现在事情变得有点疯狂了: - 如果我在UITableViewCellExtension.swift上移动相同的扩展名,它会编译并且一切正常。 - 如果我只是在SomeViewController的类体上添加 static let wololo = UITableViewCell.Identifier(“wololo”),它就可以工作。
已经检查了扩展文件和viewController的目标成员资格。
关于为什么?
的更多解释// SomeViewController.swift
extension UITableViewCell.Identifier {
static let wololo = UITableViewCell.Identifier("wololo")
}
那应该是语法:
// UITableViewExtension.swift
extension UITableView {
...
@available(iOS 6.0, *)
open func dequeueReusableCell(withIdentifier identifier: UITableViewCell.Identifier, for indexPath: IndexPath) -> UITableViewCell {
return dequeueReusableCell(withIdentifier: identifier.rawValue, for: indexPath)
}
@available(iOS 5.0, *)
open func register(_ nib: UINib?, forCellReuseIdentifier identifier: UITableViewCell.Identifier) {
register(nib, forCellReuseIdentifier: identifier.rawValue)
}
...
}
答案 0 :(得分:6)
我不确定,但这可能是一个Xcode错误。如果您创建了一个快速文件模板,那就是“标识符”。 struct不在文件之外识别。但是如果你创建一个Cocoa Touch模板文件,那就是“标识符”。 struct被认可没有问题。 templates
如果你创建一个swift模板文件,你可以去构建阶段 - >编译来源 - >删除该文件并重新添加。 希望它可以帮到你。