
Vladislavs
25.03.2017
19:07:30
но мой вопрос про каст ячейки без ворнинга в обджс актуален

Vadim
25.03.2017
19:07:38
Такие вещи не проходят в продакшн

Vladislavs
25.03.2017
19:07:59

Vadim
25.03.2017
19:08:16
у юзера вообще не должно возникнуть такой ситуации

Google

Vladislavs
25.03.2017
19:08:25
или тебя с крашем и fatalError в продакшн пускают?)

Alexander
25.03.2017
19:08:52
так нужна конкретная ячейка
а не пустая

Vadim
25.03.2017
19:08:57
Еще раз, такие вещи ВСЕГДА отлавливаются на этапе разработки
Ты блин делаешь таблицу
С одним типом
Как он вообще может не совпасть

Vladislavs
25.03.2017
19:09:13
@alfredzien Мой вопрос все еще актуален

Vadim
25.03.2017
19:09:56
Плюс с гардом я еще некоторое время могу недоумевать, почему ячейки пустые. А если краш, то сразу понятно, что с типом ошибся
Поправил и все, больше оно ни при каких условиях не вылетит

Vladislavs
25.03.2017
19:10:29
делается просто
какой гард

Vadim
25.03.2017
19:10:54
А с if let дополнительный уровень вложенности, это уж точно ужас

Google

Vladislavs
25.03.2017
19:11:00
let cell = dequeReusable...
if let cell = cell as? ZaloopaCell {
...
}
return cell
вложеность видишь ты
а не юзер

Vadim
25.03.2017
19:11:30
да вообще весь код вижу я, а не юзер, что уж там
а потом пишут по 5 вложенных ифов
смотреть больно

Vladislavs
25.03.2017
19:12:45
а мне больно смотреть
когда кто-то за тебя подумал и решил
что почему-то это optional
а ты ему суешь !
и думаешь что самый умный

Vadim
25.03.2017
19:13:17
блять
логично, что dequeue может ячейку не вернуть
или не ту

Vladislavs
25.03.2017
19:13:27
ладно, мне на мой вопрос не ответят
я пошел

Vadim
25.03.2017
19:13:38
и это должно обрабатываться разработчиком
это не зависит от каких-то внешних условий
поэтому форс каст там - это нормально

Alex
25.03.2017
19:14:16

Google

Alfred
25.03.2017
19:14:22

Vadim
25.03.2017
19:15:08
я про dequeue

Vladislavs
25.03.2017
19:15:44
не совсем понял
SomeCell *cell = dequeReusable...;
Ты просто предлагаешь обернуть в
SomeCell *cell = (SomeCell*) dequeReusable...;
?

Alfred
25.03.2017
19:16:58

Vadim
25.03.2017
19:17:04
Еще
раз
я про строчку с dequeueReusableCell
она ДЛИННАЯ
И с гардом она ОЧЕНЬ длинная
без каких-то преимуществ

Vadim
25.03.2017
19:17:44
и смысла

Alfred
25.03.2017
19:17:53
лол, а что, let a = tralala отменили?
в свифте тоже есть способ кастануть опционально.

Vladislavs
25.03.2017
19:18:44
kindOf, memberOf, да.
Только я про ворнинг

Alfred
25.03.2017
19:19:01
а какой ворнинг?

Google

Vladislavs
25.03.2017
19:19:11
а ворнинг куда денется?)
желтая херня в икскоде

Vadim
25.03.2017
19:19:19
сравни
let cell = tableView.dequeueReusableCell(withIdentifier: "**Cell", for: indexPath) as! ***TableViewCell
и
guard let cell = tableView.dequeueReusableCell(withIdentifier: "***Cell", for: indexPath) as? ***TableViewCell else { return UITableViewCell() }

Alfred
25.03.2017
19:19:32
скажи как называется

Vladislavs
25.03.2017
19:19:55
найду обджс проект сейчас, скажу

Alfred
25.03.2017
19:20:02
-Wtra-la-la что то такое должно быть

Vadim
25.03.2017
19:21:49
я умею, лол
только толку от 2 варианта никакого

Admin
ERROR: S client not available

Vladislavs
25.03.2017
19:21:59

Vadim
25.03.2017
19:22:14
Какие-нибудь аргументы против форс каста ячеек кроме "ууу это плохо" будут?

Alfred
25.03.2017
19:24:05
let identifier = "MyAwesomeIdentifier"
let cell = tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath)
let castedCell = cell as MyAwesomeCell
guard let mycell = casteCell else { return whatever }
если for: перенести на другую строку то даже в 80 символов вмещается.

Vadim
25.03.2017
19:25:50

Vladislavs
25.03.2017
19:26:21
ох, я сегодня узнал, что обджс не срет ворнинги на такое:
DoctorsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"DoctorsTableViewCell" forIndexPath:indexPath];

Alex
25.03.2017
19:26:59
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CellClass.className(), for: indexPath) as? CellClass else { return UICollectionViewCell() }

Google

Vadim
25.03.2017
19:27:03

Alex
25.03.2017
19:27:10
extension UICollectionViewCell {
static func className() -> String {
return String(describing: self)
}
}

Vadim
25.03.2017
19:27:15
примерно такой
без className

Alex
25.03.2017
19:27:34
соль в идентифаере

Alfred
25.03.2017
19:27:53

Vadim
25.03.2017
19:28:49
Просто я не вижу смысла в каком-то ином поведении при ошибке касте ячейки, кроме как краш. Может кто-нибудь объяснит? Как такое вообще может выйти в прод, ведь все эти вещи устанавливаются один-два раза за время разработки какой-нибудь таблицы или коллекции?

Alfred
25.03.2017
19:29:50

Vadim
25.03.2017
19:29:54
Выставляется идентификатор, регается ячейка с этим идентификатором, и та самая строка с dequeue. И это все не меняется. А если и меняется, то все сразу. И логично, если ты забыл что-то поменять, то приложение должно вылететь
Ты видишь вылет, и такой сразу "о, точно" и пошел поменял что забыл
И все
Все счастливы

Alfred
25.03.2017
19:30:42

Vadim
25.03.2017
19:30:50
Ну тогда согласен

Vladislavs
25.03.2017
19:30:53

Vadim
25.03.2017
19:30:59
Но если это центр какого-нибудь контроллера
То там все так, как я описал
И там форс каст это не гроб-гроб кладбище
а вполне разумно

Alfred
25.03.2017
19:31:25
Так объявлена декью. Я правда для collectionView скинул, но там тоже самое.