ios – 使用惰性变量时的编译错误

ios – 使用惰性变量时的编译错误,第1张

概述我试图了解懒惰是如何工作的.以下代码编译时没有任何错误. import UIKitclass Test : UIViewController{ let i = 1 lazy var j:Int = self.i} 如果我删除j的类型并按下面的代码推断, import UIKitclass Test : UIViewController{ let i = 1 我试图了解懒惰是如何工作的.以下代码编译时没有任何错误.

import UIKitclass Test : UIVIEwController{    let i = 1    lazy var j:Int =  self.i}

如果我删除j的类型并按下面的代码推断,

import UIKitclass Test : UIVIEwController{    let i = 1    lazy var j =  self.i}

我得到编译错误“类型的值’NSObject – >() – >测试’没有成员’我’”

有人可以解释编译器发生了什么.谢谢

解决方法 你需要在这里考虑3个方面.

>惰性存储属性是一个初始值不是的属性
计算直到第一次使用.那是你打电话的时候
该物业首次计算其价值.
>由于实际值是通过评估创建的,因此您需要声明
懒惰变量的数据类型预先.
>您在类中声明的属性是实例变量,
如果你需要访问它们的值,你需要一个实例(对象)
班级.

让我们考虑一下非工作代码中的以下行

lazy var j =  self.i

您的非工作代码中存在两个问题.首先,您尚未指定lazy var的数据类型.由于声明是不完整的,编译器不会将’j’视为lazy var,它将视为正常的实例变量.您必须了解swift的规则,即每当您在类中声明任何变量时,您必须为其指定一些值,否则您可以使该变量可选.在上面的语句中,您试图通过在类中使用self来将i的值赋给j.当编译器正在编译该行时,没有创建该类的对象,并且您使用的self是nil,这就是编译器抛出错误的原因(即使您因为上述相同的原因而不使用self,它也会抛出错误) .

为什么它不会导致您的工作代码出现问题:

lazy var j:Int =  self.i

正如我上面提到的,当您调用该变量时,将赋予lazy var的值.你如何将这个变量称为类?当然是通过创建对象.当你在对象’self’的帮助下调用它时,它将指向同一个对象,self将不会为零,它不会导致任何问题.

总之,你需要了解两件事情

>在声明延迟var时,您必须指定数据类型> lazy var在声明时未分配,它在分配时分配叫做>如果没有类的实例(对象),则无法调用实例var

总结

以上是内存溢出为你收集整理的ios – 使用惰性变量时的编译错误全部内容,希望文章能够帮你解决ios – 使用惰性变量时的编译错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1067256.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存