我创建了以下协议,并符合以下所示的协议枚举:
protocol HamburgerOption {
static var all :[HamburgerOption] { get }
var title :String { get }
}
enum Meat :HamburgerOption {
private static var allCases :[Meat] = [.chicken, .beef]
case chicken
case beef
static var all :[HamburgerOption] {
return Meat.allCases
}
var title :String {
switch self {
case .chicken:
return "Chicken"
case .beef:
return "Beef"
}
}
}
当我创建以下结构时,它给我错误:
// Value of type 'Meat.Type' does not conform to expected element type //'HamburgerOption'
struct HamburgerOptions {
var all :[HamburgerOption] {
return [Meat, Sauces]
}
}
答案 0 :(得分:1)
您的属性已定义为返回符合HamburgerOption
的实例数组。但是,通过返回[Meat, Sauces]
,您将返回一个 types 数组,而不是 instances 。您需要做的是返回一个 instances 数组。您可以通过为您的类型添加all
方法的结果来简单地做到这一点:
return Meat.all + Sauces.all
(对于想在那儿玩的谢尔登·库珀(Sheldon Cooper),是的,如果他确实需要创建一系列类型,则需要在每个类型后面加上.self
)