Почему нельзя создать массив объектов соответствия протокола в Swift? - PullRequest
0 голосов
/ 09 сентября 2018

Я создал следующий протокол и перечисление, соответствующее протоколу, как показано ниже:

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 голосов
/ 10 сентября 2018

Ваше свойство определено так, чтобы возвращать массив экземпляров, которые соответствуют HamburgerOption. Однако, возвращая [Meat, Sauces], вы возвращаете массив типов , а не экземпляров . Что вам нужно сделать, это вернуть массив экземпляров . Вы можете сделать это, просто добавив результаты методов all для ваших типов:

return Meat.all + Sauces.all

(Для любого желающего Шелдона Купера, да, если бы ему действительно нужно было создать массив типов, ему нужно было бы добавить каждый из них с .self)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...