Вернуть непрозрачный тип массива - PullRequest
0 голосов
/ 01 февраля 2020

Можно ли вернуть some [T]?

protocol P {
    associatedtype X
    func method() -> [X]
}

class Imp: P {
    typealias X = Int

    func method() -> some [Int] {
        return [1]
    }
}

Приведенный выше код вызывает ошибку «Непрозрачный» тип должен указывать только «Any», «AnyObject», протоколы и / или базовый класс "

РЕДАКТИРОВАТЬ: Diagram Таким образом, протокол скрывает базовый @NSMangedObject и предоставляет только необходимые свойства. Было бы хорошо, если бы A, B имели возможности Comparable.

1 Ответ

0 голосов
/ 01 февраля 2020

Это невозможно, но это потому, что это ничего не значит. some T означает «конкретный c, конкретный тип, соответствующий T, известный возвращаемой функцией во время компиляции, но не известный вызывающей стороне». [Int] - это тип, известный вызывающей стороне. В этом нет ничего "непрозрачного". Это идентично:

func method() -> [Int] { ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...