Как я могу вернуть тип экземпляра в Swift из метода экземпляра - PullRequest
0 голосов
/ 23 ноября 2018

Рассмотрим метод, подобный следующему:

- (instancetype)sizeFit {
    [self sizeToFit];
    return self;
}

Это полезно для цепочки методов, у меня в API написано целое API, как это, и я хотел переместить его в Swift, искал здесь вопросы, но нашел только некоторые сложные ответывместо «нет» это невозможно обычным образом.

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Спасибо, короче говоря, это эквивалентный способ быстрого возврата типа экземпляра:

extension UIView {
    func someFunctionThatReturnInstanceTypeInAllSubclassesOfView() -> Self {
        return self
    }
}

Хотя в классах это не будет работать.

0 голосов
/ 23 ноября 2018

Очень короткий ответ: нет, прямого эквивалента нет.

Более подробный ответ заключается в том, что языки концептуально различны.

  • В Objective-C все, что возвращается, - это объект, называемый id.Использование instancetype является подсказкой для компилятора и IDE для определенного типа, чтобы разрешить дальнейшие проверки и автозаполнение.Это работает для подклассов и расширений.
  • Swift строго типизирован, базового объекта нет, у нас также есть классы и структуры.Функция может возвращать только определенный тип, Self, универсальный тип или associatedtype.Лучшим приближением было бы перенести эту функциональность в extension или protocol и использовать Self.Это будет работать так же.Этому нет эквивалента в контексте подкласса.

Длинный подробный ответ Возвращение экземпляра в Swift

...