鉴于此 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)
不会工作,编译器无法给我指定的错误,我知道这是因为协议,可能需要在某处强制转换类型?