为什么不能在Swift中创建协议一致性对象数组?

时间:2018-09-09 18:37:19

标签: swift

我创建了以下协议,并符合以下所示的协议枚举:

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]
        }
    }

1 个答案:

答案 0 :(得分:1)

您的属性已定义为返回符合HamburgerOption的实例数组。但是,通过返回[Meat, Sauces],您将返回一个 types 数组,而不是 instances 。您需要做的是返回一个 instances 数组。您可以通过为您的类型添加all方法的结果来简单地做到这一点:

return Meat.all + Sauces.all

(对于想在那儿玩的谢尔登·库珀(Sheldon Cooper),是的,如果他确实需要创建一系列类型,则需要在每个类型后面加上.self