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

快速正确使用吸气剂和吸气剂

聂建茗
2023-03-14
问题内容

有人可以帮助我迅速了解正确使用吸气剂和吸气剂的方法。我对它的印象与说Java不一样。

这是Swift中用于存储和访问类变量的正确用法吗?

class Person {
    private var name: String

    init(name: String) {
        self.name = name
    }

    func setName(name: String) {
        self.name = name
    }

    func getName() -> String {
        return name
    }
}

问题答案:

斯威夫特提供了更结构化的方法来getterssetters比Java。

你可以,但你应该 不会 ,写getter和setter方法就像你在你的代码一样。

相反,(如果您使用stored properties)只需声明可见性为non的属性即可private(例如,internal在我的示例中)。这样,您班级外的呼叫者将可以查看属性并进行更改。

class Person {

    var name: String {
        willSet(newValue) {
            print("\(self.name) is going to be renamed as \(newValue)")
        }
        didSet(oldValue) {
            print("\(oldValue) has been renamed as \(self.name)")
        }
    }

    init(name: String) {
        self.name = name
    }
}

好的,但是在java中,getter和setters确实允许我添加自定义逻辑,以便在更改值之前或之后执行。

对!在Swift中,您可以使用willSetdidSet观察者。

willSet(newValue)

您在此处编写要在属性中写入新值 之前
运行的代码。在这里,您可以访问当前值(也将被覆盖),self.name而通过可以使用新值newValue

didSet(oldValue)

您在此处编写要在属性中写入新值
运行的代码。在中,您可以使用来访问旧值(已被覆盖),oldValue而在中可以使用新值self.name

这两个willSetdidSet是可选的(我 不是 在谈论可选的类型!我的意思是你不会被强迫他们写:)。

如果您不需要只运行某些代码beforeafter属性已更改,只需忽略它们。

let aVerySmartPerson = Person(name: "Walter White")
aVerySmartPerson.name = "Heisenberg"

// > Walter White is going to be renamed as Heisenberg
// > Walter White has been renamed as Heisenberg


 类似资料:
  • 问题内容: 我在读这篇文章,了解为什么和邪恶。本文没有说过 不要 使用它们,而是告诉您以限制使用这些方法的方式进行思考,或者引用该文章: 不要要求您进行工作所需的信息;询问具有信息的对象为您完成工作。 当您需要在GUI中显示数据但没有getter方法时会发生什么?本文简要介绍了这一点,但并不完整。它提到将JComponent传递给类,但是如果您要进行GUI更改,则可能需要进行很多工作才能修复。 例

  • 问题内容: 我有一堂课,看起来像下面这样: 我的hibernate映射文件按如下所示映射属性: 我收到以下错误: 看来hibernate不喜欢我的大写字母。我该如何解决? 问题答案: 应该管用…

  • 问题内容: 我知道Java中关于布尔型getter的约定包括前缀“ is”。 但是,如果主题是复数呢?也就是说,如果我不想知道某个商店是否已营业,而又想知道所有商店是否已营业怎么办? 用英语没有意义。 我很想写这样的getter: 我认为这是有意义的,但我一直在别人告诉我,我应该只是吮吸它,抛弃主题动词协议和使用,,。 无论如何,对于在复数主题上运算的布尔型吸气剂,我该怎么办? 问题答案: 我不记

  • 我按照时间表使用VUE,我对VUE和JS非常陌生。我创建了VUE组件,它将一些新属性添加到已经处于状态的对象中,然后我将这个对象与getter一起呈现在我的另一个VUE组件中,但不幸的是,新属性仅在重新加载后呈现。这是我添加新属性的组件片段 这是国务院的一个片段 以下是操作 这是突变,它完成了所有的工作 吸气剂 这里是计算属性,它从getters中获取时间表 所以问题是我不能使吸气剂反应,但我看到

  • 问题内容: 我想在两次调用getter和setter之后编写我的业务逻辑,因为我在业务逻辑中使用了它们的对象值。但是,在吸气剂之前调用了Construct,Post构造,actionevents..。 那么,如果我不想在内部获取业务逻辑,该如何使用它们的值呢? 问题答案: 我想导航到该站点并从显示在outputText中的数据库中获取数据。 在bean的(后)构造函数中执行该工作。 与 当我更改(

  • 问题内容: 如果在这样的调用中收到NullPointerException: 我得到了一个无用的异常文本,例如: 我发现很难找出哪个调用实际上返回了null,经常发现自己将代码重构为如下形式: 然后等待更具描述性的NullPointerException,该异常告诉我要查找的行。 你们中的某些人可能会认为,连接吸气剂是不好的风格,无论如何都应避免,但是我的问题是:我可以在不更改代码的情况下找到错误