gpt4 book ai didi

swift - 关闭 : Use unresolved identifier 'self'

转载 作者:IT王子 更新时间:2023-10-29 05:52:06 29 4
gpt4 key购买 nike

我正在解析 Swift 语言指南教程(来自 Apple iOS 开发库),并为每一章创建一个单独的 swift 文件。在每个文件中,我创建了多个函数,并在其中隔离了它们提供的代码片段。一切正常,直到测试闭包的强引用循环。 出于某种原因,如果包含闭包(用于计算属性)的类是在函数内部声明的,则闭包无法看到封闭类的“self”引用。任何想法为什么? 如果该类未在函数内声明,则它可以正常工作。

func strongRefClosure() {
class HTMLElement {

let name: String
let text: String?

lazy var asHTML: () -> String = {
if let text = self.text {
return "<\(self.name)>\(text)</\(self.name)>"
} else {
return "<\(self.name) />"
}
}

init(name: String, text: String? = nil) {
self.name = name
self.text = text
}

deinit {
println("\(name) is being deinitialized")
}
}

var paragraph: HTMLElement? = HTMLElement(name: "p", text: "hello, world")
println(paragraph!.asHTML())
}

最佳答案

看起来非常像一个错误(或者至少,我找不到记录的函数局部结构/类的行为)。这很好用:

struct Foo {
let someVal = 5
lazy var someLazy: String = {
return toString(self.someVal)
}()
}

var foo = Foo()
foo.someLazy // string "5"

但这不是:

func outer() {
struct Foo {
let someVal = 5
lazy var someLazy: String = {
// error: use of unresolved identifier 'self'
return toString(self.someVal)
}()
}

var foo = Foo()
foo.someLazy
}

不过,外部结构内部的内部结构是有效的:

struct Outer {
struct Foo {
let someVal = 5
lazy var someLazy: String = {
return toString(self.someVal)
}()
}

var foo = Foo()
}

var outer = Outer()
outer.foo.someLazy

正如@JeremyP 所说,你应该 file a radar .

关于swift - 关闭 : Use unresolved identifier 'self' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29366270/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com