【问题标题】:Type '_' has no member 'id' SwiftUI类型 '_' 没有成员 'id' SwiftUI
【发布时间】:2020-02-24 20:19:06
【问题描述】:

所以在过去的几个小时里,我一直在尝试创建一个水平卡片组,以显示我正在从事的项目的最新头条新闻。我现在所在的位置正在阻止我的整个流程,因为我的列表在我的结果结构中找不到我的 id 变量。下面我附上了代码,任何帮助将不胜感激。

HeadlinesUI.swift - Screenshot

import SwiftUI

struct Response: Codable {
    var results: [Result]
}

struct Result: Codable {
    var id: Int
    var title: String
    var header_image: String
    var summary: String
}

struct HeadlineUI: View {
    @State var results = [Result]()

    var body: some View {
        ScrollView(.horizontal) {
            HStack(spacing: 20) {
                List(results, id: \.id) { items in

                }
                .onAppear(perform: loadData)
            }
        }
    }

    func loadData() {

    }
}

struct HeadlineUI_Previews: PreviewProvider {
    static var previews: some View {
        HeadlineUI()
    }
}

【问题讨论】:

  • 请不要包含您的代码的屏幕截图 - 而是将其粘贴到问题的正文中。谢谢
  • 你得到了两者,这样你就可以看到相关的错误。
  • 我不建议使用Result 作为类型的名称。它不仅过于笼统而无法描述(实际上任何东西都可以称为结果:数字、字符串、表格),而且它还与 Swift 标准库中构建的 Result 类型冲突。我认为这是造成问题的原因。
  • 按照您的想法,我用文章更改了结果,但仍然出现相同的错误。
  • @thealexvond 如果你明确指定\Article.id会发生什么?

标签: json swift struct swiftui


【解决方案1】:

正如cmets中提到的ResultSwift中的一个类型,所以你必须使用不同的名字。

我去了:

struct MyResult: Codable {
    var id: Int
    var title: String
    var header_image: String
    var summary: String
}

因为它有一个id,所以你可以让它成为Identifiable

extension MyResult: Identifiable {}

本体:

var body: some View {
    ScrollView(.horizontal) {
        HStack(spacing: 20) {
            ForEach(results) { result in
                Text(result.title)
            }
            .onAppear(perform: { self.loadData() })
        }
    }
}

您宁愿需要ForEach,然后是List,并且构建器不能为空。 onAppear 也将闭包作为其参数。完成所有更改后,View 将按预期运行。

【讨论】:

  • 非常感谢,我这辈子都想不通。
  • @thealexvond 在你的辩护中,这里的编译器错误非常糟糕。问题的很大一部分是,如果列表体为空,则传递给 List 的闭包的返回类型未指定,这会导致编译器难以解释的所有类型错误指南。
猜你喜欢
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
  • 2015-08-14
  • 1970-01-01
相关资源
最近更新 更多