【问题标题】:What is default access modifier for private class property in swift 5.0?swift 5.0 中私有类属性的默认访问修饰符是什么?
【发布时间】:2019-10-16 05:44:51
【问题描述】:

根据 swift 文档,如果您将类型的访问级别定义为私有或文件私有,则其成员的默认访问级别也将是私有或文件私有

我创建了一个示例代码来使用 Swift 5.0 分析上述语句

private class Profile {
    var name: String?
    //By default name should have private access level implicitly
}

private class Person {
    private var name: String?
    //name should have private access level explicitly
}

func gobalTestFunction() {
    let profile = Profile()
    let profileName = profile.name
    //This does not give any error and name is accessible here

    let person = Person()
    let personName = person.name
    //This gives error 'name' is inaccessible due to 'private' protection level
}

预期结果:

创建 profileName 时,应该会出现与创建 personName 时发生的错误类似的错误

'name' is inaccessible due to 'private' protection level

实际结果:

创建 personName 时发生错误,但创建 profileName 时未遇到错误。

【问题讨论】:

标签: swift


【解决方案1】:
  • 使类在目标/框架内而不是外部可访问 也就是说,您可以使用默认的内部访问修饰符。
  • 如果你想让类在文件中可访问,你可以 使用 fileprivate 访问修饰符。


    简而言之,在顶层将一个类设为私有是没有意义的。它实际上是文件私有的。

    感谢@Martin R 的有用评论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2013-04-16
    • 2014-04-01
    • 2015-11-26
    • 1970-01-01
    相关资源
    最近更新 更多