我有一个让我真正困惑的事情,特别是以下代码触发了编译器错误“ unresolved identifier
self”,我不确定为什么会这样,因为懒惰意味着在使用该属性时,该类已经实例化了。我想念什么吗?
提前谢谢了。
这是代码
class FirstClass {
unowned var second: SecondClass
init(second:SecondClass) {
self.second = second
print("First reporting for duty")
}
func aMethod() {
print("First's method reporting for duty")
}
}
class SecondClass {
lazy var first = FirstClass(second: self)
func aMethod() {
first.aMethod()
}
}
由于某种原因,如果惰性属性的初始值引用,则需要显式类型注释self
。在swift-
evolution邮件列表中
提到了这一点,但是我无法解释 为什么 这样做是必要的。
用
lazy var first: FirstClass = FirstClass(second: self)
// ^^^^^^^^^^^^
您的代码将按预期编译并运行。
这是另一个示例,它说明struct
s 也发生了问题,即与子类无关。
func foo(x: Int) -> Int { return x + 1 }
struct MyClass {
let x = 1
lazy var y = foo(0) // No compiler error
lazy var z1 = foo(self.x) // error: use of unresolved identifier 'self'
lazy var z2: Int = foo(self.x) // No compiler error
}
的初始值y
不依赖self
且不需要类型注释。的初始值z1/z2
取决于self
,并且仅使用显式类型注释进行编译。
更新: 在Swift 4 / Xcode 9 beta
3中已修复此问题,惰性属性初始化程序现在可以引用实例成员self
,而无需显式和无显式类型注释。(感谢@hamish进行更新。)
问题内容: 如果按以下方式实现单例, 此实现与延迟初始化方法有何不同?在这种情况下,实例将在加载类时创建,并且仅在第一次使用时才加载类本身(例如,Singleton.getInstance(),而当您声明实例Singleton singleton = null;时则不会)。 即使采用惰性初始化方法,该实例也是在对getInstance()的调用上创建的 我在这里想念什么吗? 问题答案: 您也可以调
问题内容: 当我尝试获取懒惰的初始化实体时,我在IDE中看到以下异常消息(我无法找到它在代理实体中的存储位置,因此无法为该异常提供整个堆栈跟踪): 这是我尝试访问要使用的惰性初始化实体的字段后得到的堆栈跟踪: 我正在使用Spring Data,已配置JpaTransactionManager,数据库是MySql,ORM提供程序是Hibernate4。注释@EnableTransactionMana
我有一个数据表的问题-懒加载。我认为问题是在IdiomasBean.java(TableBean.java),如果我把: 我得到了正确的数据表,但是<代码>按排序、筛选和不起作用。 我得到:java。lang.NullPointerException这里是堆栈跟踪: 下面是代码的其余部分: 指数xhtml diomasBean.java 懒散的数据模型。JAVA IdiomasBo.java 习语
问题内容: 我已经使用了一段时间了,我喜欢这样的事实:该元素直到必要时才被定位(不在实例化时)。 但是,该网页可能具有某个元素2-10的任意位置,并且元素上的ID已编号(因此第一个元素的ID为“ element1”,依此类推) 我想编写一个函数,我可以在一个整数关口,它会返回一个WebElement与适当的ID, 和 被懒洋洋地实例化。这意味着具有以下功能将无法正常工作: 因为我立即调用该函数,即
问题内容: 我想创建自己的集合,该集合具有python list的所有属性,并且还知道如何将自身保存到数据库中或从数据库中加载。我也想使负载隐式和惰性,因为在列表创建时它不会发生,而是等到第一次使用时才发生。 有没有一种单一的方法,我可以覆盖上加载任何列表属性(如第一次使用清单,,而不必重写他们… …等)? 问题答案: 不,没有。
我试着把我的头绕到相对较新的img属性“加载”上。 我知道,如果img具有load=“lazy”属性,那么它会告诉支持该属性的浏览器,在接近视口时可以加载该属性。 那么为什么不总是设置loading=“lazy”?那些立即出现在屏幕上的图像无论如何都会被渲染,因为它们已经在视口中了。因此,在这种情况下,基本上忽略了load=“lazy”。 在这个演示https://mathiasbynens.be