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

xv8emn3q  于 2023-10-24  发布在  Swift
关注(0)|答案(1)|浏览(138)

我目前正在使用Xcode版本15.0,并希望实现一个箭头的搬运工。当使用一个立场变量,因为它是在互联网上的各种网站,最近出现了一个以前未知的问题,即自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上发现类似的问题。

twh00eeo

twh00eeo1#

具体的错误是lldb找不到@State变量的getter。大概是@State宏导致swift在你的变量周围生成getter和setter来完成它的工作,但是编译器选择“内联”使用getter,而不是发出一个可以在调试器中调用的常规方法。
您可以使用v来检查变量。v对值进行静态检查,而不是像p那样在调试对象中调用代码,因此有时可以忽略这类问题。
但如果你有时间,也值得向swift bug reporter提交一个bug:
https://github.com/apple/swift/issues/
-ONone中,swift应该使getter在调试器中可调用。

相关问题