在 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 是一个解决方案。也许不明智。您还必须在应用程序中使用 SwiftUI Picker 的所有其他视图中指定 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 视图,因此这不太可能是您想要的。

如果应用程序最终需要 OtherPickerSwiftUI.Picker 并且模块名称再次被省略,那么追踪错误会更加混乱 - 而且你已经花了“一整天”时间.因此,最好完全不引入冲突来避免这种可能性:)

【讨论】:

以上是关于在 Swift UI 中使用 Picker 的不明确引用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift UI 中删除 Picker 视图的灰色背景框

在 swift ui 中找不到 PopUpButtonPickerStyle [关闭]

简单的反应错误:不能在 Next.js 中使用 @material-ui/picker 库

通过大型 Array Swift 过滤

mint-ui之datetime-picker使用

问题求助.请问mint-UI中的时间选择器Datetime picker如何使用