【问题标题】:AttributeGraph: cycle detected through attribute using @State in playgroundsAttributeGraph:在 Playground 中使用 @State 通过属性检测到循环
【发布时间】:2019-09-28 14:07:11
【问题描述】:

我正在尝试在操场上使用 SwiftUI 的 @State。这是我的代码:

import UIKit
import PlaygroundSupport
import SwiftUI

struct ContentView: View {
    @State private var showGreeting = false

    var body: some View {

        Form {
            Button(action: {
                self.showGreeting.toggle()
            }) {
                Text("Toggle Greeting")
            }

            if showGreeting {
                Text("Hello World!")
            }
        }
    }
}

let viewController = UIHostingController(rootView: ContentView())

PlaygroundPage.current.liveView = viewController

我可以在实时取景中看到按钮。但是,如果我单击它,它不会显示文本。第二次单击确实会显示文本。进一步的点击似乎在视觉上没有任何区别。

每次点击时,我都会在日志区域收到以下消息:

=== AttributeGraph: cycle detected through attribute 38 ===

需要一些帮助来理解这在这种情况下意味着什么以及为什么状态不自然地表现。

注意:我运行的是 macOS Mojave,所以我没有 SwiftUI 预览选项。我正在使用 Playground 的实时预览。

【问题讨论】:

  • 适用于 Xcode 12 / iOS 14

标签: ios swift swiftui


【解决方案1】:

您的 SwiftUI 没有任何问题,粘贴到新项目时运行良好。

如果将 Form 更改为 VStack,它在 Playground 中可以正常工作。使用列表会给您同样的错误。也许是一个错误,我会report it to Apple

根据我的经验,如果您暂时无法使用 Mojave,只需设置一个可以运行模拟器的项目即可。编译和运行只需几秒钟,当您的 SwiftUI 游乐场崩溃、出现此类奇怪的错误等时,您最终可以节省时间。

【讨论】:

  • 感谢您的回复。是的,我知道我可以在一个完整的项目中构建它并让它工作。我很好奇为什么这在操场上不起作用。
  • 你提交错误了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 2020-10-20
  • 2013-04-04
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多