【问题标题】:Why private is unaccessible to the extension?为什么扩展无法访问私有?
【发布时间】:2017-10-22 07:27:38
【问题描述】:

这是我的 ViewController.swift 文件:

class ViewController: UIViewController {
    private var myInt = 10
}

extension ViewController {
    func printMyInt() {
        print(myInt)
    }
}

虽然在Swift documentation - Access Levels section中提到:

私人访问将实体的使用限制在封闭范围内 声明,以及该声明在中的扩展 同一个文件。使用私有访问隐藏 a 的实现细节 仅使用这些细节时的特定功能 在一个声明中。

由于 Swift 4 已经发布,我假设我能够实现这样的事情(它也在:What's New in Swift - WWDC 2017 session 中提到),但是,编译器告诉我:

由于“私人”保护级别,无法访问“myInt”

是否与文档中提到的不兼容?


作为一个简单快速的解决方案,我可以将其声明为:

fileprivate var myInt = 10

但我想知道为什么会这样,我误解了文档中提到的内容吗?还是“Xcode”错误(使用 9.0.1 版本)?

备注:该项目是在旧版 Xcode 8 中创建的,然后迁移到 Xcode 9。

【问题讨论】:

    标签: swift xcode access-control swift4


    【解决方案1】:

    Swift 4 中,private 成员可以访问同一文件中该声明的扩展,请参阅 SE-0169 – Improve Interaction Between private Declarations and Extensions

    如果项目是在 Xcode 8(使用 Swift 3)中创建的,那么 Xcode 9 将以“Swift 3 模式”打开它,并将“Swift Language Version”设置为“Swift 3.2”。因此,更严格的 Swift 3 限制仍然成立。

    要使私有扩展对同一文件中的扩展可见, 在构建设置中将 Swift 语言版本设置为 4。 (当然 这可能需要对您的代码进行更多更改。)

    更好的是,使用“Edit -> Convert -> To Current Swift Syntax ...”

    【讨论】:

    猜你喜欢
    • 2011-02-09
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    相关资源
    最近更新 更多