iOS   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 使用惰性变量时的编译错误大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图了解懒惰是如何工作的.以下代码编译时没有任何错误.

import UIKit
class Test : UIViewController{
    let i = 1
    lazy var j:Int =  self.i
}

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

import UIKit
class 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 – 使用惰性变量时的编译错误所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。