Ios 扩展结构不是Swift上的成员
创建了一个简单的扩展,允许我为UITableViewCell指定一个标识符,这样我就可以命名它,就像Apple在通知方面所做的那样。名称:Ios 扩展结构不是Swift上的成员,ios,swift,struct,extension-methods,Ios,Swift,Struct,Extension Methods,创建了一个简单的扩展,允许我为UITableViewCell指定一个标识符,这样我就可以命名它,就像Apple在通知方面所做的那样。名称: // UITableViewCellExtension.swift extension UITableViewCell { public struct Identifier: RawRepresentable { public typealias RawValue = String public var rawVa
// 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 wololo=UITableViewCell.Identifier(“wololo”),它就可以工作了
已检查扩展文件和viewController的目标成员身份
再解释一下原因 这应该是语法:
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)
}
}
我不确定,但这可能是一个Xcode错误。如果创建swift文件模板,“标识符”结构在文件外部无法识别。但是,如果您创建一个Cocoa Touch模板文件,“Identifier”结构将被识别,不会出现任何问题。 如果您创建了一个swift模板文件,您可以进入构建阶段->编译源代码->删除该文件并再次添加它。 希望它能帮助你
更多的是关于语法,因为我修改了单元格的注册和排队方式,这样我就可以组织其标识符,而不必每次都使用枚举和数字原始值。它确实有效,我将在开发者Apple上报告它是一个bug,感谢您的帮助。我必须在Project Navigator中按正确的顺序放置文件。说明:如果在名为A的文件中声明了A,并且在文件B中声明了名为E(A.E)的扩展名,那么在项目导航器中,A文件应该出现在文件B之前。完美的解决方案和说明。奇怪的是,我能够构建并运行这个应用程序。唯一的问题是Xcode错误。删除/添加文件确实有效。
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)
}
}