具有协议类型的 Swiftui Picker - 编译器无法对此表达式进行类型检查

问题描述 投票:0回答:0

鉴于此 Struct who conforms to

Relationable
protocol

struct PersonalRelation:Relationable {
    
    typealias Relationship = PersonalRelationType
    
    func getAllRelationships() -> [PersonalRelationType] {
           return PersonalRelationType.allCases
       }
        
    var relationship: PersonalRelationType  = .friend

} 


  protocol Relationable {
    
    associatedtype Relationship: Hashable
    var relationship: Relationship { get set }
    func getAllRelationships() -> [Relationship]
}

而这个

Published
变量在符合
ObservableObject

的 ViewModel 中

   @Published var selectedRelation: any Relationable = PersonalRelation()

relationship
变量是符合
Enum
CaseIterable
Hashable

如果我有 3 个符合协议的结构(PersonalRelation、ProfessionalRelation 等),每个变量都有这个变量,我想将它分配给

Picker
选择,而不是制作 3
Picker

这样做

   Picker("Type", selection: $relationsVM.selectedRelation.relationship) {
                        ForEach(relationsVM.selectedRelation.getAllRelationships()) { relationType in
                            Text(relationType.rawValue.capitalized())
                        }
                    }.pickerStyle(.menu)

不会工作,编译器无法给我指定的错误,我知道这是因为协议,可能需要在某处强制转换类型?

swift swiftui swift-protocols swiftui-picker
© www.soinside.com 2019 - 2024. All rights reserved.