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

Swift只读外部,内部读写属性

蓬高谊
2023-03-14
问题内容

在Swift中,定义公共模式的常规方式是什么,在该模式中,属性是外部只读的,但可以由拥有该属性的类(和子类)在内部进行修改。

在Objective-C中,有以下选项:

  • 在接口中将该属性声明为只读,并使用类扩展名在内部访问该属性。这是基于消息的访问,因此可以很好地与KVO,原子性等配合使用。
  • 在接口中将该属性声明为只读,但在内部访问后备ivar。由于对ivar的默认访问受到保护,因此在类层次结构中效果很好,在该类层次结构中,子类也可以修改值,但该字段为只读。

在Java中,约定为:

  • 声明一个受保护的字段,并实现一个公共的只读getter(方法)。

Swift的成语是什么?


问题答案:

给定一个类属性,您可以通过在属性声明的前面加上access修饰符,然后在括号之间getset括号之间指定不同的访问级别。例如,具有公共获取器和私有设置器的类属性将声明为:

private(set) public var readonlyProperty: Int

建议阅读:Getters和Setters

Martin关于可访问性级别的考虑仍然有效-
即没有protected修饰符,internal仅将对模块的访问限制为仅对private当前文件的访问,并且public没有任何限制。

2个新的访问修饰符,fileprivate并且open已添加到语言中,而privatepublic已稍作修改:

  • open仅适用于类和类成员:用于允许对类进行子类化或在定义它们的模块之外重写成员。public而是使类或成员可公开访问,但不能继承或覆盖

  • private现在使成员仅从封闭的声明中可见并可以访问,而fileprivate对于包含该成员的整个文件

更多细节在这里。



 类似资料:
  • 问题内容: 我不知道何时属性应该是私有的,是否应该使用属性。 我最近读到,setter和getters不是pythonic,我应该使用属性装饰器。没关系。 但是,如果我有属性,那一定不能从类外部设置,而是可以读取的(只读属性)。这个属性应该是私有的吗?我所说的私有是指下划线吗?如果是,那么不使用getter怎么读?我现在知道的唯一方法是写 这样我就可以读取属性,但是我无法设置它,所以很好。 但是我

  • 问题内容: 我们为我们的一个应用程序提供了一个连接池组件(JAR文件)。截至目前,应用程序连接详细信息捆绑在JAR文件中(在文件中)。 我们可以使其更通用吗?我们可以让客户端告诉属性文件详细信息(路径和文件名),然后使用JAR来获得连接吗? 客户端代码中包含以下内容是否有意义: 与此同时,客户端将指定(以某种方式???)属性文件详细信息,其中包含要连接的URL,超时等。 问题答案: http://

  • 每个人都知道如果我们想要读取属性文件,我们可以这样做: 但是,现在我有了一个类似于SpringBoot的框架。它可以将Spring与Mybatis集成在一起。 问题是前面的代码只能读取我的项目类路径文件,但我需要使用我的框架读取project属性文件。我是怎么做的?

  • 请查看这段编译良好的代码:

  • 外部读取配置命令 可以写到一个文件中,用 Mininet 直接调用。例如脚本文件名为 my_cli_script,则可以执行 mininet> source my_cli_script 或者 # mn --pre my_cli_script