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

属性初始化程序在“自我”可用之前运行

贾兴学
2023-03-14
问题内容

好像我遇到了本不应该出现的问题……但我想寻求帮助。

这里有一些我没有得到的解释。

具有两个简单的类,其中一个引用另一个,如下所示;

class User {
  lazy var name: String = ""
  lazy var age: Int = 0

  init (name: String, age: Int) {
      self.name = name
      self.age = age
  }
}

class MyOwn {
  let myUser: User = User(name: "John", age: 100)
  var life = myUser.age 
  //Cannot use instance member 'myUser' within property initializer
  //property initializers run before 'self' is available
}

我收到注释的编译错误。有人可以告诉我该怎么办吗?

非常感谢任何好人的帮助!


问题答案:

正如 vadian 正确指出的 那样, 您应该init在以下情况下创建一个:

class MyOwn {
    let myUser: User
    var life: Int

    init() {
        self.myUser = User(name: "John", age: 100)
        self.life = myUser.age 
    }
}

您不能为 依赖 于另一个实例属性的存储属性提供默认值。



 类似资料:
  • 问题内容: 我使用JavaScript为节点项目编写了以下代码,但是在测试模块时遇到错误。我不确定错误是什么意思。这是我的代码: 当我尝试运行此模块时,它将引发以下错误: 我不太明白这意味着什么,以及我能做些什么来解决这个问题。 问题答案: 由于它是一个对象,因此将值分配给其属性的方法是使用。 更改,以修复错误。

  • 我有一个场景,我试图在Cordova的deviceready事件上初始化我的应用程序。现在,这个初始化序列需要几秒钟的时间来执行。这导致总发射时间远大于预期。我的问题是,是否可以简单地与即将推出的Cordova API和插件并行运行此初始化序列? 注意:初始化没有利用API或插件中的任何内容,所以我不能简单地在加载时立即运行它,而不是在onDeviceReady上运行它吗?

  • 问题内容: 我很好奇,无论如何在init方法内部调用一个用于设置类实例属性的方法。本质上,我只是有一个类来对UIView进行子类化,并在init中添加了一些子视图,而其中一些子视图是该类的实例变量。 现在出现了问题,我无法在初始化类的内部属性之前调用super init(在super.init调用时未初始化属性’self.collectionView’),但是在调用之前,我也无法调用自定义方法来初

  • 我有以下代码类: 但是,我得到这个编译错误: 关键字“this”在当前上下文中不可用 我可以通过简单地不使用自动属性初始值设定项来修复它,并显式地将其移动到构造函数中: 为什么会这样?在 IL 中,自动属性初始值设定项实际上不是被转换为构造函数代码吗?

  • 我在想,是否可以使用对< code>this关键字的引用来初始化一个(引用类型)属性(当它的值为< code>null),而不使用构造函数。< br >在某些情况下,我不想使用构造函数来初始化属性,因此,如果没有人访问它,它的值将不会被创建。< br >此外,如果可能的话,我不喜欢在构造函数中将属性声明与其初始化分开。 一个典型的例子是MVVM模式编程的命令声明: 我不喜欢写三倍的成员的名字… 我

  • 问题内容: 我有一个静态util类,它对敏感数据进行一些字符串操作。在使用此类之前,我需要使用我喜欢存储在文件中的值(例如用户名/密码)初始化某些静态变量。 我不太熟悉Java 中文件的加载方式,尤其是在 Spring DI 容器之外。任何人都可以帮助我/如何做到这一点? 谢谢! 另外: 文件的精确位置是未知的,但是它将在类路径上。有点像 问题答案: 首先,从中获取要加载的属性。这可以来自多个位置