[swift]编译错误时使用延迟变量

标签: ios Swift
发布时间: 2017/3/6 23:35:26
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想了解如何懒作品在 swift 。下面的代码编译时没有任何错误。

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' 的值有没有成员 'i'"

谁能解释与编译器什么。谢谢你

解决方法 1:

您需要考虑三个方面在这里。

  • 懒惰的存储的属性是直到第一次用,不会计算其初始值属性。 这是当你第一次将计算其值调用属性。
  • 评价由创建时的实际值,您需要声明锋线懒变量的数据类型。
  • 您在您的类中声明的属性是实例变量,如果你需要访问它们的值,你需要 instance(object) 的类。

让我们考虑以下线从非工作代码

lazy var j =  self.i

两个问题目前在非工作代码。第一是变种的您没有指定数据类型的你懒惰 正如声明 》 不完整编译器不会当作 'j' 懒的 var,它将是为正常的实例变量。你必须意识到关于 swift 的规则,每当你声明任何变量在类中必须将一些值分配给它,否则你可以使该变量可选。 在以上声明您试图分配 i j 通过在类中使用自我的价值。 当编译器编译不创建类的任何对象的那条线和您正在使用的自我是零,就是为什么编译器投掷的错误 (它将引发错误,即使你不使用自我因同样的原因,如上文所述)。

为什么它不工作代码中导致问题︰

lazy var j:Int =  self.i

正如我刚才以上为懒惰的 var 值分配当你调用该变量。 你怎么会叫出一面类变量? 当然,通过创建对象。 当你将调用它的帮助下 '自我' 将指向相同的对象和自我的对象不会零它不会引起任何问题。

简单地说两件事你需要了解的三件事

  • 你必须同时宣布懒 var 指定的数据类型
  • 懒惰的 var 不分配声明它时,它被分配当它被称为
  • 你不可以调用 instance(object) 您的类没有实例 var
赞助商