当前位置: 首页 > 面试题库 >

在Swift3中区分文件私有和私有的好例子

仲孙钊
2023-03-14
问题内容

该文章已在了解新的访问说明很有帮助Swift 3。它也给出了不同用途的一些例子fileprivateprivate

我的问题是-是不是fileprivate仅在此文件中使用的函数上使用的功能与using相同private


问题答案:

fileprivate现在是privateSwift早期发行版中的版本:可从同一源文件访问。private现在,只能在声明的词法范围内访问标记为的声明。因此private比更具限制性fileprivate

Swift 4开始, 如果扩展名是在同一源文件中定义的,则同一类型的扩展名可以访问类型内的私有声明。

示例(全部在一个源文件中):

class A {
    private func foo() {}
    fileprivate func bar() {}

    func baz() {
        foo()
        bar()
    }
}

extension A {
    func test() {
        foo() // Swift 3: error: use of unresolved identifier 'foo'
              // Swift 4: no error because extension is in same source file
        bar()
    }
}

let a = A()
a.foo() // error: 'foo' is inaccessible due to 'private' protection level
a.bar()
  • foo仅在class A { ... }定义范围内才能访问private 方法。从扩展名到类型都无法访问它(在Swift 3中,有关Swift 4中的更改,请参见下面的第二个注释)。

  • bar可以从同一源文件访问file-private 方法。

笔记:

  1. 建议SE-0159 –修复专用访问级别建议在Swift 4中恢复到Swift 2语义。在对swift-evolution邮件列表进行了冗长而有争议的讨论之后,该建议被拒绝。

  2. 提案SE-0169 –改善私有声明和扩展之间的相互作用建议,private 如果扩展在 同一源文件中 定义,则使该类型内的声明可用于同一类型的扩展 该建议已在Swift 4中接受并实施。



 类似资料:
  • 本书之前提到了“封装”的概念,即指将一系列指令放在一个函数体内部的处理过程。而这样的做法则是为了将函数的接口与它的实现分离(函数接口指如何使用这个函数,函数实现则指如何去实现这个函数及实现具体做了些什么)。 上面提到这种封装可以命名为“功能封装”,用以区分本章将要介绍的“数据封装”。数据封装是基于这样的理念提出的:每一个结构的定义应当包括应用于本结构的函数集以及阻止对内部的无限制访问。 数据封装的

  • 在任何语言中,都会规定某些对象(属性、方法、函数、类等)只能够在某个范围内访问,出了这个范围就不能访问了。这是“公”、“私”之分。此外,还会专门为某些特殊的东西指定一些特殊表示,比如类的名字就不能用class,def等,这就是保留字。除了保留字,python中还为类的名字做了某些特殊准备,就是“专有”的范畴。 私有函数 在某些时候,会看到有一种方法命名比较特别,是以“__”双划线开头的,将这类命名

  • 4.6.1.1 使用私有文件 这种情况下使用的文件,只能在同一个应用中读取/写入,并且这是使用文件的一种非常安全的方式。 原则上,无论存储在文件中的信息是否是公开的,尽可能使用私有文件,当与其他应用交换必要的信息时,应该使用另一个 Android 系统(内容供应器,服务)来完成。 要点: 文件必须在应用目录中创建。 文件的访问权限必须设置为私有模式,以免其他应用使用。 可以存储敏感信息。 对于存储

  • 问题内容: 最近,我经常使用枚举。所以我想知道… 私有Enum构造函数和带有任何可见性修饰符(package-private)的枚举构造函数之间有什么区别吗? 问题答案: 根据java 文档 枚举类型的构造函数必须是程序包私有或私有访问。 但加入了JLS 如果没有为枚举类型的构造函数指定访问修饰符,则该构造函数为私有。 因此,package-private和private之间没有区别。

  • 在 Python 的面向对象编程中,私有属性是只能在类的实例方法中访问的属性,不允许在外界访问私有属性。 1. 私有属性的定义 1.1 定义 在属性名称前加上前缀 __,表示该属性为私有属性,示例代码如下: class Object: def method(self): self.__private_attribute = 123 在第 3 行,创建一个私有属性 __pr

  • 我也尝试了npm ursa模块,不幸的是没有成功。