代码之家  ›  专栏  ›  技术社区  ›  john doe

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

  •  -1
  • john doe  · 技术社区  · 6 年前

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

    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 回复  |  直到 6 年前
        1
  •  1
  •   Charles Srstka    6 年前

    您的属性被定义为返回符合 HamburgerOption . 然而,通过返回 [Meat, Sauces] ,您将返回 类型 实例 . 您需要做的是返回 实例 . 只需添加 all 类型的方法:

    return Meat.all + Sauces.all
    

    (对于任何Sheldon Cooper想要的人来说,是的,如果他真的需要创建一个类型数组,他需要用 .self )