动态排序引发‘toolbar(content:)’使用歧义编译错误求助
问题原因及修复方案
核心错误
你遇到的Ambiguous use of 'toolbar(content:)'编译错误,根源是**EntrySortOrder结构体没有声明遵循View协议**。SwiftUI要求所有视图结构体必须显式遵循View协议,否则编译器无法识别它作为视图的类型,进而导致上层视图链的类型推断混乱,最终引发toolbar调用的歧义。
另外代码里还有两个小问题:
EntrySortOrder的body里用了未定义的travelEntries,应该是你通过@Query声明的entriesEntryView里的@Query var entries: [Entries]缺少初始化逻辑,这可能是你精简代码时省略的,暂时不影响当前编译错误的修复
修正后的代码
struct EntryView: View { @State private var sortOrder = SortOrder.forward @Query var entries: [Entries] // 实际使用时需补充初始化逻辑 var body: some View { VStack { EntrySortOrder(sortOrder: sortOrder) } .toolbar { Button { sortOrder = sortOrder == .forward ? .reverse : .forward } label: { Image(systemName: "arrow.up.arrow.down.circle") } .symbolVariant(sortOrder == .forward ? .none : .fill) } } } @MainActor struct EntrySortOrder: View { // 添加View协议遵循 @Query private var entries: [Entries] init(sortOrder: SortOrder) { let sort = [SortDescriptor(\Entries.entryDate, order: sortOrder)] _entries = Query(sort: sort) } var body: some View { List { ForEach(entries) { item in // 修正为正确的变量名entries ShowRow(item: item) } } } }
内容的提问来源于stack exchange,提问作者Galen Smith
相关产品推荐
相关产品推荐

