【问题标题】:Unable to infer complex closure return type; add explicit type to disambiguate?无法推断复杂的闭包返回类型;添加显式类型以消除歧义?
【发布时间】:2020-05-26 15:11:41
【问题描述】:

我有一个观点,我想在其中包含一个 if 语句,但是当 if 语句被添加到 ForEach 闭包时,它会导致触发此错误。有什么解决方法吗?

import Foundation
import SwiftUI

struct SearchResults: View {
    @ObservedObject var VModel: ViewModel
    var body: some View {
        List {
            ForEach(self.VModel.searchResults, id: \.self) { result in 
                self.RowText
            }
        }
    }

    private var RowText: some View {
        if result.country != nil { //Cannot access the result variable here?
            return Text("First conditional met!")
        } else {
            return Text("Second conditional met!")
        }
    }

}

旁注:searchResults 是 GeocodedPlacemark 类型的数组。 VModel 是一个地理编码类。

【问题讨论】:

  • 如果它是nil,你需要返回一些东西
  • 查看this 答案,了解如何在Viewbody 内设置条件SwiftUI View。如果条件为假,则需要返回EmptyView
  • @DávidPásztor 我不认为我可以返回视图,它会弄乱视图的外观......如果你可以再看看我的代码,我怎么能引用'结果' RowText 视图中的变量?
  • @nickcoding EmptyView 不会创建任何可视视图,因此不会弄乱您的 UI
  • @DávidPásztor 好吧...如果我只返回 EmptyView(),我仍然会遇到同样的错误,如 Andrew 的回答所示

标签: swift view swiftui geocode


【解决方案1】:

改用函数,如下

struct SearchResults: View {
    @ObservedObject var VModel: ViewModel
    var body: some View {
        List {
            ForEach(self.VModel.searchResults, id: \.self) { result in
                self.rowText(result: result)
            }
        }
    }

    private func rowText(result: GeocodedPlacemark) -> some View {
        if result.country != nil { //Cannot access the result variable here?
            return Text("First conditional met!")
        } else {
            return Text("Second conditional met!")
        }
    }
}

【讨论】:

  • 谢谢 Asperi!你帮了大忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
相关资源
最近更新 更多