Swift 错误:无法查找具有@State变量的符号

Swift error: Couldn't lookup symbols with @State variable

提问人:Martin01 提问时间:10/14/2023 更新时间:10/18/2023 访问量:106

问:

我目前正在使用 Xcode 版本 15.0,并希望在移植器中实现箭头。在各种站点的 Internet 上使用 stand 变量时,最近出现了一个以前未知的问题,即从 Xcode 版本 15.0 开始,无法再读取以下变量:

import SwiftUI
import RealmSwift

struct commands: Commands{
    
    @ObservedResults(Book.self) var allBooks
    
    @State private var isShowing = false
    @State private var test = "test"
    private var test2 = "tessssst"
    var fileManager = FileManagerSingelton.shared
    
    var body: some Commands {
        CommandMenu("import"){
            Button("Import File"){
                isShowing.toggle()
            }                        //$isShowing is probably the error and becomes nil  
            .fileImporter(isPresented: $isShowing, allowedContentTypes: [.item]) {result in
                switch result {
                case .success(let url):
                    pass
                case .failure(let error):
                    print(error)
                    return
                    
                }
            }
        }
    }
}

为了调试,我添加了两个变量 Test 和 Test2

(lldb) po test
error: Couldn't lookup symbols:
  SpeedReader.commands.test.getter : Swift.String
(lldb) p test
error: Couldn't lookup symbols:
  SpeedReader.commands.test.getter : Swift.String
(lldb) po test2
"tessssst"
(lldb) p test2
(String) "tessssst"

不幸的是,我还没有在 Steckoverflow 上真正发现类似的问题。

swift xcode macOS 调试 lldb

评论

0赞 Joakim Danielson 10/14/2023
您可以在属性名称前使用下划线,或者po _testp _test
0赞 workingdog support Ukraine 10/15/2023
有时错误可能来自其他地方,是什么?pass
0赞 Martin01 10/15/2023
@JoakimDanielson返回所需的值。但是当我在代码中使用时,程序再次崩溃并显示相同的错误消息。po _test.wrappedValue_isShowing.projectedValue
0赞 Martin01 10/15/2023
@workingdogsupportUkraine只存在于代码部分,这并不那么重要。我把它拿出来是为了更易于阅读。pass
0赞 Joakim Danielson 10/15/2023
我没有告诉你在代码中使用它,我的评论仅适用于调试器。我不知道你指的是什么崩溃或错误。

答:

0赞 Jim Ingham 10/17/2023 #1

具体错误是 lldb 找不到变量的 getter。据推测,宏导致 swift 在变量周围生成 getter 和 setter 来完成它的工作,但编译器选择“内联”使用 getter,而不是发出可以在调试器中调用的常规方法。@State@State

您可以使用它来检查该变量。 对值进行静态检查,而不是像调试器那样调用代码,因此有时可以看到此类问题。vvp

但是,如果你有时间,也值得向 swift bug 报告者提交一个 bug:

https://github.com/apple/swift/issues/

在 swift 应该使 getter 在调试器中可调用。-ONone