在 Swift UI 中使用 Picker 的不明确引用
Posted
技术标签:
【中文标题】在 Swift UI 中使用 Picker 的不明确引用【英文标题】:Ambiguous reference with a Picker in Swift UI 【发布时间】:2019-07-03 07:47:18 【问题描述】:我正在尝试使用 SwiftUI 制作一个 Picker。我遵循了一个教程,但没有相同的结果。在 self.category.count 和 self.category[$0] 上有不明确的引用。一整天下来,我还是不知道怎么解决……
import SwiftUI
struct Picker : View
var category = ["Aucun", "BF Glaive", "Baguette", "Negatron", "Larme", "Ceinture", "Arc", "Cotte", "Spatule"]
@State private var selectedCategory = 0
var body: some View
VStack
Picker(selection: $selectedCategory, label: Text("Item"))
ForEach(0 ..< self.category.count)
Text(self.category[$0])
.tag($0)
Text("Selected : \(category[selectedCategory])")
【问题讨论】:
【参考方案1】:要解决模块之间的名称冲突,您可以:
-
将您的
Picker
重命名为其他名称。
使用限定(完整)名称:
SwiftUI.Picker(selection: $selectedCategory, label: Text("Item"))
【讨论】:
#2 是一个解决方案。也许不明智。您还必须在应用程序中使用 SwiftUIPicker
的所有其他视图中指定 SwiftUI.Picker
。当另一个开发人员出现并想要使用 SwiftUI 的 Picker
时,他们会收到这个误导性的错误消息,并且不知道它来自哪里。需要注意的事情。
@JWK 通常声明自己的Picker
的原因是在任何地方都使用它而不是默认的Picker
。该错误具有误导性,因为 Swift 编译器没有在错误消息中包含限定名称,而不是因为名称错误。【参考方案2】:
错误消息Ambiguous reference to member 'count’
具有误导性。您所拥有的是 SwiftUI.Picker
和您的 Picker
结构之间的命名冲突。只需将结构的名称更改为 Picker 以外的名称。例如:
struct CategoryPicker : View
// ...
或者,您可以通过提供 SwiftUI.Picker
的完全限定名称来解决模块之间的命名冲突(正如 Sulthan 指出的那样):
SwiftUI.Picker(selection: $selectedCategory, label: Text("Item"))
// ...
但是,除非您打算在应用中的所有位置替换 SwiftUI.Picker
,否则我不建议您使用此选项。您的代码包含 category
数组和 Text
视图,因此这不太可能是您想要的。
如果应用程序最终需要 OtherPicker
和 SwiftUI.Picker
并且模块名称再次被省略,那么追踪错误会更加混乱 - 而且你已经花了“一整天”时间.因此,最好完全不引入冲突来避免这种可能性:)
【讨论】:
以上是关于在 Swift UI 中使用 Picker 的不明确引用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift UI 中删除 Picker 视图的灰色背景框
在 swift ui 中找不到 PopUpButtonPickerStyle [关闭]