【发布时间】:2021-04-04 17:19:05
【问题描述】:
我正在使用 SwiftUI,并希望根据 Picker 中的项目数设置 View 的 pickerStyle。如果项目少,SegmentedPickerStyle() 是理想的,WheelPickerStyle() 越多越好。
}.pickerStyle(productsObserver.product.productFamilies?.count ?? 0 < 5 ? SegmentedPickerStyle() : WheelPickerStyle())
函数签名如下:
我了解到的func pickerStyle<S>(_ style: S) -> some View where S : PickerStyle 在函数签名中使用泛型,因为 PickerStyle 使用关联类型。
这不应该是一个如此困难的问题,而且可能不是 - 协议应该像这样简单 = 工作,但我看不到它。 非常感谢任何帮助!
【问题讨论】:
-
pickerStyle是一个通用方法,它接受符合PickerStyle的具体类型(在编译时)。因此,它不能是SegmentedPickerStyle或WheelPickerStyle- 它必须是其中之一。无论是哪一种,都会使编译器创建一个具体的方法,例如pickerStyle<SegmentedPickerStyle>. -
感谢 ELI5,我想我现在明白了。你也可以帮我解决一下吗?考虑过实施我自己的课程(即 DynamicPickerStyle),但我想这只是转移了问题?
标签: swift protocols associated-types