创建了一个简单的扩展,允许我向UITableViewCell提供标识符,这样我就可以命名它,就像苹果对Notification.Name所做的那样:
// 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
}
}
}在此之后,我们的想法是在UIViewController上添加这段代码,这样我就可以组织我的单元标识符了:
// SomeViewController.swift
extension UITableViewCell.Identifier {
static let wololo = UITableViewCell.Identifier("wololo")
}但我得到了以下错误:
“标识符”不是“UITableViewCell”类型的成员
现在事情变得更疯狂了:-如果我在UITableViewCellExtension.swift上移动相同的扩展,它就会编译,一切都会好起来。-如果我只是在SomeViewController的类主体上添加静态let = UITableViewCell.Identifier(" wololo "),它就能工作了。
已经检查了扩展名文件和viewController的目标成员资格。
再解释一下为什么?
// 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)
}
...
}这应该是语法:
class PlacesViewController: UIViewController, UITableViewDataSource {
let tableView = UITableView()
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UINib(), forCellReuseIdentifier: .wololo)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return tableView.dequeueReusableHeaderFooterView(withIdentifier: .wololo)
}
}https://stackoverflow.com/questions/44191698
复制相似问题