gpt4 book ai didi

ios - 扩展结构不是 Swift 的成员

转载 作者:行者123 更新时间:2023-11-28 09:42:23 24 4
gpt4 key购买 nike

创建了一个简单的扩展,允许我为 UITableViewCell 提供一个标识符,这样我就可以命名它,就像 Apple 对 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")
}

但是我得到了以下错误:

'Identifier' is not a member of type 'UITableViewCell'

现在事情变得有点疯狂了:- 如果我在 UITableViewCellExtension.swift 上移动相同的扩展,它会编译并且一切正常。- 如果我只是在 SomeViewController 的类主体上添加 static let wololo = UITableViewCell.Identifier("wololo"),它就可以工作。

已经检查了扩展文件和 viewController 的 Target Membership。


关于原因的更多解释

// 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)
}
}

最佳答案

我不确定,但这可能是 Xcode 的错误。如果您创建一个 swift 文件模板,则在文件外部无法识别“标识符”结构。但是,如果您创建 Cocoa Touch 模板文件,则可以毫无问题地识别“Identifier”结构。 templates

如果你创建了一个 swift 模板文件,你可以去 build phases -> compile sources -> remove the file and add it again.希望对您有所帮助。

compile sources

关于ios - 扩展结构不是 Swift 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44191698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com