Anonymous
поэтому форс каст там - это нормально
Aλeχ
поэтому форс каст там - это нормально
форс каст никогда не нормально
Anonymous
я про dequeue
Vladislavs
не совсем понял
SomeCell *cell = dequeReusable...; Ты просто предлагаешь обернуть в SomeCell *cell = (SomeCell*) dequeReusable...; ?
Alfred
я про dequeue
у меня 9 строчек, что я делаю не так?
Anonymous
Еще
Anonymous
раз
Anonymous
я про строчку с dequeueReusableCell
Anonymous
она ДЛИННАЯ
Anonymous
И с гардом она ОЧЕНЬ длинная
Anonymous
без каких-то преимуществ
Anonymous
и смысла
Alfred
лол, а что, let a = tralala отменили?
Alfred
в свифте тоже есть способ кастануть опционально.
Vladislavs
kindOf, memberOf, да.
Vladislavs
Только я про ворнинг
Alfred
kindOf, memberOf, да.
ну вот после проверки кастуешь
Alfred
а какой ворнинг?
Vladislavs
а ворнинг куда денется?)
Vladislavs
желтая херня в икскоде
Anonymous
сравни 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
желтая херня в икскоде
У меня ворнинги включены как ерроры, поэтому у меня нет их :(
Alfred
скажи как называется
Vladislavs
найду обджс проект сейчас, скажу
Alfred
-Wtra-la-la что то такое должно быть
Anonymous
я умею, лол
Anonymous
только толку от 2 варианта никакого
Anonymous
Anonymous
Какие-нибудь аргументы против форс каста ячеек кроме "ууу это плохо" будут?
Alfred
let identifier = "MyAwesomeIdentifier" let cell = tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath) let castedCell = cell as MyAwesomeCell guard let mycell = casteCell else { return whatever }
Alfred
если for: перенести на другую строку то даже в 80 символов вмещается.
Anonymous
let identifier = "MyAwesomeIdentifier" let cell = tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath) let castedCell = cell as MyAwesomeCell guard let mycell = casteCell else { return whatever }
Итак, одна строка превращается в 3, а при какой-нибудь ошибке в регистрации ячеек ячейки почему-то становятся пустыми, вместо того, чтобы программа просто брякнулась на строке с получением ячейки. И зачем?
Vladislavs
ох, я сегодня узнал, что обджс не срет ворнинги на такое: DoctorsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"DoctorsTableViewCell" forIndexPath:indexPath];
Aλeχ
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CellClass.className(), for: indexPath) as? CellClass else { return UICollectionViewCell() }
Aλeχ
extension UICollectionViewCell { static func className() -> String { return String(describing: self) } }
Anonymous
примерно такой
Anonymous
без className
Aλeχ
соль в идентифаере
Alfred
Я не люблю лишний код
поэтому и говорю что форматированию надо поучится
Anonymous
Просто я не вижу смысла в каком-то ином поведении при ошибке касте ячейки, кроме как краш. Может кто-нибудь объяснит? Как такое вообще может выйти в прод, ведь все эти вещи устанавливаются один-два раза за время разработки какой-нибудь таблицы или коллекции?
Alfred
Anonymous
Выставляется идентификатор, регается ячейка с этим идентификатором, и та самая строка с dequeue. И это все не меняется. А если и меняется, то все сразу. И логично, если ты забыл что-то поменять, то приложение должно вылететь
Anonymous
Ты видишь вылет, и такой сразу "о, точно" и пошел поменял что забыл
Anonymous
И все
Anonymous
Все счастливы
Anonymous
Ну тогда согласен
Anonymous
Но если это центр какого-нибудь контроллера
Anonymous
То там все так, как я описал
Anonymous
И там форс каст это не гроб-гроб кладбище
Anonymous
а вполне разумно
Alfred
Так это не downcast же, что бы без ворнинга было
Да, из-за такого объявления даункаст не нужен
Alfred
Так объявлена декью. Я правда для collectionView скинул, но там тоже самое.
Vladislavs
Ну, я немного о другом
Alfred
Вот этот __kindof позволяет не даункастить.
Alfred
костыль эпловый
Vladislavs
я думаю, почему я ворнинга не увидел из-за того, что у меня может быть 50 kindof UITableViewCell в проекте
Vladislavs
а мне никто ворнинга не дал
Vladislavs
типо, гарантирует, что вернется экземпляр ровно того класса, что у меня в lvalue
Alfred
Но если это центр какого-нибудь контроллера
тогда кидаешь сообщение в аналитику. Это лучше чем креш, сможешь собрать дополнительные данные.
Anonymous
просто краша вообще в проде не должно быть
Anonymous
его прелесть в том, что он заметен на этапе разработки
Anonymous
тогда же он и должен быть исправлен
Alfred
на этапе разработки есть ассерт
Anonymous
если такое в прод проходит, то это пиздец
Anonymous
я говорил про краш из-за каста ячейки, лол
Vladislavs
Вадим, а ты один работаешь или в команде?
Oleksii
wat?
Anonymous
Я как-то попробовал свифтлинт, но меня взбесили ворнинги про переносы строк и количество пробелов. Я просто cmd+i часто нажимаю, чтобы выровнять код. Стояли в настройках xCode пробелы. Заменил на табы - все равно ругается