Comments 11
Код в виде картинок
+5
Вы можете скачать Playgrounds здесь и все попробовать вживую.
0
__kindof прямого отношения к дженерикам не имеет, например developer.apple.com/library/ios/documentation/UIKit/Reference/UITableView_Class/index.html#//apple_ref/occ/instm/UITableView/dequeueReusableCellWithIdentifier:forIndexPath:
0
Ссылка никуда не ведет кроме UITableView. Можете сказать своими словами о чем там речь? __kindof представляет собой целую группу типов и может рассматриваться как некий обобщенный (generic) тип.
0
Из New Features in Xcode 7
KindOf. Objects declared as __kindof types express “some kind of X” to the compiler and can be used within generic parameters to constrain types to a particular class or its subclasses. Using __kindof allows constraints to be more flexible than an explicit class, and more explicit than just using id.
0
Прямые ссылки на методы в документации Apple как обычно не работают, извините.
Я говорил о следующем методе:
Никаких дженериков тут нет, как видите.
Я говорил о следующем методе:
- (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;
Никаких дженериков тут нет, как видите.
0
Почему нет? Это означает, что я могу использовать для ячейки любой тип, у которого superclass — UITableViewCell: TweetTableViewCell, ImageTableViewCell и т.д. Это своего рода generic с ограничением: superclass — UITableViewCell. Впрочем, я не настаиваю именно на термине generic. Но это обобщенный тип специального типа с заданным superclass.
+1
Больше похоже на подпорку от Apple.
Зачем в сигнатуре директива __kindof, когда здесь и так возвращаемый тип (UITableViewCell *), а наследование с полиморфизмом ещё никто не отменял? Привет Барбаре Лисков.
Зачем в сигнатуре директива __kindof, когда здесь и так возвращаемый тип (UITableViewCell *), а наследование с полиморфизмом ещё никто не отменял? Привет Барбаре Лисков.
0
Раньше id возвращался, теперь __kindof UITableViewCell *. Последнее более точно передает смысл и помогает компилятору выявлять ошибки. Если бы возвращался просто UITableViewCell, то нужно было бы делать приведение типов каждый раз, когда нужна кастомная ячейка.
+2
Вообще-то это нужно не столько разработчикам на Objective-C, сколько инженерам Apple для совместимости со Swift. В Swift мы теперь для этого метода видим не AnyObject, а UITableViewCell, и не нужно делать «кастинг» для обычной UITableViewCell. В Swift 2 «кастинга» стало на порядок меньше. Про Барбару Лисков тоже знаем.
0
Sign up to leave a comment.
«Что нового в Swift 2?» на примерах. Часть 2