2
Думаю, я борюсь с дженериками. Я хочу создать простое расширение UIView, чтобы найти рекурсивно супервизор класса, переданный в параметре функции. Я хочу, чтобы функция возвращала необязательный элемент, содержащий, очевидно, либо нуль, либо объект, видимый как экземпляр предоставленного класса.Быстрое обнаружение супервизора данного класса с дженериками
extension UIView {
func superviewOfClass<T>(ofClass: T.Type) -> T? {
var currentView: UIView? = self
while currentView != nil {
if currentView is T {
break
} else {
currentView = currentView?.superview
}
}
return currentView as? T
}
}
Любая помощь очень ценится.
Что именно проблема? Ваш код выглядит так, как будто он должен работать. Вы упомянули, что пытаетесь сделать это рекурсивно, но ваше решение является итеративным. Вы пытаетесь преобразовать этот код в рекурсивную версию? Можете ли вы включить свои попытки сделать это? –
Извините, моя ошибка, рекурсивная часть вопроса совершенно не имеет значения, я сделал ее итеративной для простоты кода, ключевой частью является общий. И на самом деле ... вы правы, этот код работает, я понятия не имею, почему это не удалось. Я немного очистил его, чтобы опубликовать его здесь, и, похоже, чисткой я исправил его). –
неправильный просмотр как суперкласс lol. – Alexander