【问题标题】:Struct 'State' cannot be used as an attribute结构“状态”不能用作属性
【发布时间】:2021-01-16 11:40:20
【问题描述】:

我在ContentView.swift 文件中有以下代码:

struct ContentView: View {
    @State private var selectedSpeed: Int = 1
    
    var body: some View {
        Text("Hello World")
    }
}

为了便于阅读,我已对其进行了简化。我知道selectedSpeed 没有被使用。

在声明 selectedSpeed 的行中,我收到以下错误:Struct 'State' cannot be used as a attribute

有趣的是,将完全相同的代码粘贴到 Playground 中会成功构建。我在 Xcode 12.1 上。我已经尝试过核对派生数据和重新打开 Xcode 的组合,但错误仍然存​​在。有什么想法吗?

【问题讨论】:

    标签: ios swift macos swiftui watchos


    【解决方案1】:

    原来我的项目中有一个名为Statestruct,这导致了问题。

    TL;DR:如果您打算使用 SwiftUI,则永远不要调用任何结构和潜在的类 State。。我会将其扩展为不使用与属性包装器冲突的内容来命名您的任何类或结构。

    这也解释了为什么 Playground 中一切正常。

    报告导航器实际上给了我提示

    【讨论】:

    • 当,泰。对我来说同样的事情。只是为了安全起见,将我的对象更改为:StateObj、CityObj 和 CountryObj。
    • 感谢您分享此问题背后的原因。您刚刚为我节省了数小时的挠头。
    • 感谢您的评论。这就是我决定首先分享的主要原因!我已经失去了几个小时来理解出了什么问题:D
    【解决方案2】:

    名称State 不受保护,根据您的回复/回答,您在其他地方声明了State,无论是在您自己的应用程序中还是在您可能要导入该文件的依赖项中。

    您可以通过显式设置正确的“命名空间”来告诉编译器使用什么符号。

    例如:

    struct ContentView: View {
        @SwuiftUI.State private var selectedSpeed: Int = 1
        
        var body: some View {
            Text("Hello World")
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      • 2013-10-27
      • 2021-05-30
      • 1970-01-01
      • 2023-04-02
      • 2021-12-27
      相关资源
      最近更新 更多