首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >扩展结构不是Swift的成员

扩展结构不是Swift的成员
EN

Stack Overflow用户
提问于 2017-05-26 00:24:01
回答 1查看 1.2K关注 0票数 1

创建了一个简单的扩展,允许我向UITableViewCell提供标识符,这样我就可以命名它,就像苹果对Notification.Name所做的那样:

代码语言:javascript
运行
复制
// 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上添加这段代码,这样我就可以组织我的单元标识符了:

代码语言:javascript
运行
复制
// SomeViewController.swift

extension UITableViewCell.Identifier {
    static let wololo = UITableViewCell.Identifier("wololo")   
}

但我得到了以下错误:

“标识符”不是“UITableViewCell”类型的成员

现在事情变得更疯狂了:-如果我在UITableViewCellExtension.swift上移动相同的扩展,它就会编译,一切都会好起来。-如果我只是在SomeViewController的类主体上添加静态let = UITableViewCell.Identifier(" wololo "),它就能工作了。

已经检查了扩展名文件和viewController的目标成员资格。

再解释一下为什么?

代码语言:javascript
运行
复制
// 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)
    }

    ...
}

这应该是语法:

代码语言:javascript
运行
复制
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)
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-28 02:29:59

我不确定,但这可能是Xcode错误。如果您创建了一个快速文件模板,则“标识符”结构在文件之外是无法识别的。但是,如果您创建一个Cocoa模板文件,“标识符”结构就会被识别出来,没有任何问题。模板

如果您创建了一个快速的模板文件,您可以转到构建阶段->编译源->删除该文件并再次添加它。希望它能帮到你。

编译源

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44191698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档