Как бы вы смоделировали интерфейс Java List в Swift? - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь понять, для каких проблем подходят протоколы в Swift, и я думаю, что этот вопрос был бы хорошим прокси для него.Мы можем взглянуть на подмножество интерфейса Java List.

interface List<T> {

    public void add(t: T) 
}

Я начал с того, что предполагал, что это должен быть протокол в Swift со связанным типом, но это предположение быстро доставило мне неприятности..Я также заметил, что тип Swift Array не является протоколом, поэтому совершенно не очевидно, что протоколы здесь являются решением по умолчанию.

Если вы хотите создать базовый тип List, который служит только дляопределить интерфейс и затем предоставить несколько реализаций этого интерфейса, которые можно использовать, как если бы они были List, как бы вы смоделировали его в Swift?Если ответ не «с помощью протоколов со связанными типами», можно ли каким-то образом изменить проблему, чтобы сделать ответ «определенно протоколами со связанными типами»?

РЕДАКТИРОВАТЬ: Я включу фрагмент кодачто-то, что не переводится прямо в Swift.Как это должно выглядеть?У нас не может быть ссылок на протоколы со связанными типами, поэтому мы не можем напрямую это перевести.Я спрашиваю, на что это должно быть переведено в Swift.

class Inventory<T> {

    private final List<T> remainingItems
    private final List<T> soldItems

    public Inventory(){
        remainingItems = new ArrayList()
        soldItems = new ArrayList()
    }

    public void itemSold(t: T){
        // ...
    }

    public void newItem(t: T){
        // ...
    }
}
...