Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 懒惰的给予';实例成员不能用于类型';错误_Ios_Swift_Lazy Evaluation - Fatal编程技术网

Ios 懒惰的给予';实例成员不能用于类型';错误

Ios 懒惰的给予';实例成员不能用于类型';错误,ios,swift,lazy-evaluation,Ios,Swift,Lazy Evaluation,我已经犯了好几次这样的错误,我采取了不同的解决办法,但我真的很好奇为什么会发生这种情况。基本情况如下: class SomeClass { var coreDataStuff = CoreDataStuff! lazy var somethingElse = SomethingElse(coreDataStuff: coreDataStuff) } 所以我知道我不能在类完全初始化之前使用self,但在这种情况下,我使用self属性coreDataStuff初始化一个延迟变量,直到我的实

我已经犯了好几次这样的错误,我采取了不同的解决办法,但我真的很好奇为什么会发生这种情况。基本情况如下:

class SomeClass {
  var coreDataStuff = CoreDataStuff!
  lazy var somethingElse = SomethingElse(coreDataStuff: coreDataStuff)
}
所以我知道我不能在类完全初始化之前使用self,但在这种情况下,我使用self属性
coreDataStuff
初始化一个延迟变量,直到我的实例准备好之后才会发生

任何人都可以解释我为什么会
实例成员不能用于类型
错误?

请尝试:

class SomeClass {
  var coreDataStuff = CoreDataStuff!
  lazy var somethingElse: SomethingElse = SomethingElse(coreDataStuff: self.coreDataStuff)
}

很重要的一点是,要精确定义惰性变量的类型,并在传递的参数中添加
self。
在Swift中,惰性变量容易忽略两个要求,不幸的是,警告很模糊,没有解释如何修复它

惰性变量需求
  • 使用
    self.
    引用实例成员时,必须使用
    self.
    。(例如,
    自身半径

    如果忘记使用
    self.
    ,将出现以下错误:

    实例成员“myVariable”不能用于类型“MyType”

  • 指定类型:无法推断类型,必须显式写入。(例如
    :Float

    如果忘记指定类型,将出现以下错误:

    使用未解析标识符“self”

  • 例子
    返回的是什么?
    CoreDataStuff()
    ?抱歉,键入代码示例太快,它没有返回任何内容,只是未包装的可选内容,稍后将使用管理我的核心数据对象的实例对其进行初始化。只是想澄清一下,当前版本的代码给了我一个错误,可能是因为您没有使用“self.coreDataStuff”?可能的重复与。这个问题涉及惰性变量,而另一个问题涉及get only变量。在Swift中有两个非常不同的东西。你能解释一下这个语法吗?因为这是我第一次看到这样的东西。将self作为参数传递给SomethingElse init是怎么回事?我试过了,但它给了我一个错误,它无法将self转换为CoreDataStuff,这是正常的,因为SomeClass与CoreDataStuff无关。你是否在我写的时候添加了
    SomeThingelType
    ?哦,等等,我以为
    SomethingElse
    是一种方法。。。我的宝贝,我同时也明白了,谢谢你,这很有帮助。知道为什么斯威夫特在我添加self时不抱怨吗。对于coreDataStuff?我想,由于上下文不同(不是在方法中),所以不明显您想要的是
    coreDataStuff
    的内容,而不是“指针”
    coreDataStuff
    。你需要精确类型,因为你引入了一个“变量”,我猜编译器不确定它是什么类型,因为它是惰性的。
    struct Circle {
      let radius: Float
      lazy var diameter: Float = self.radius * 2 // Good
    //lazy var diameter        =      radius * 2 // Bad (Compile error)
    }