Anton
PHP 7.0.8 (cli)
Vladimir
на php
свят, свят, свят
Anton
свят, свят, свят
нуну, а для некоторых пых это небольшое хобби приносящие неплохую годовую прибавку
Vladimir
Понимаю, на свете очень много разных хобби. Некоторые кактусы едят, например :)
archie
Рыбята, а какие минусы (плюсы), чтобы стартануть проект на свифте? Я сам до этого писал в основном на обжси, но новый проект в компании хочу на свифте начать. Все говорят про проблемы версионности, но те же инстаграмы переводят свои проекты на новые версии свифта и вроде как успешно. Проект средней сложности - список ивентов, юзеры, картиночки, веб версия и все в таком духе.
Ilkhom
нет никаких проблем, начинай, голова есть руки есть дальше само собой разумеется
Евгений
переводил на днях проект с 2.3 на 3.0, много свифтовых либ с кокоаподс, навороченная приватная либа на юнити, iphone/ipad, проект довольно сложный. заняло около 8 часов, автоматическая тулза не всегда все верно делает, после нее приходилось фиксить, но в целом особых проблем не возникло
archie
круто, ожидал примерно такие ответы)
Евгений
у нас десятки проектов на обжс, несколько только свифтовых, но все новые стартуем на свифте
Anonymous
Да ну не будешь ты сходу писать быстрее
зависит от количества освоенных императивных языков в общем
Anonymous
но потом, мне кажется, не заочется обратно на обжс
Stanislav
зависит от количества освоенных императивных языков в общем
Ну вот у меня в копилке php, c, c++, Java и Objective C. Не быстрее. Часть синтаксиса отличается от других в принципе. Часть методов переименовали и знание их названий в Objective C не помогает, на это тратится время
Anonymous
хочу в херос погонять
Stanislav
Ещё убивает интерфейс билдер с ibdesignable, постоянно ребилдит вьюхи и падает на ровном месте (а по сути там только cornerRadius и тень и вьюшек) Периодически прыгаю в проект на Objective C, на данный момент гораздо комфортнее. Когда пробовал писать на яве под андроид, такого не было
Bulat
Зачем делать ibdesignable ради корнеров и теней?
Anonymous
зачем делать ibdesignable
Stanislav
Потому что есть такая возможность. А ради чего его вообще тогда было вводить-то?
Stanislav
Речь о том, что даже на такой простой задаче он работает криво
Anonymous
наверное ради каких-нибудь верстальщиков
Anonymous
верстка в икскоде вообще костыльная
Anonymous
это вам не xaml..
Stanislav
верстка в икскоде вообще костыльная
нормальная. Я уже говорил и еще раз повторю - поверстаю без проблем любые вьюшки на автолейауте. Но только без ibdesignable :D
Stanislav
Stanislav
Ссука. Первый раз открываешь xib, все ок. Правишь контроллер - начинается
Vladimir
xib'ы не нужны
Stanislav
xib'ы не нужны
Что юзать?
Vladimir
кодом
Stanislav
Зачем писать кодом то, что делается в IB с удобным просмотром и быстрой проверкой на всех размерах экранов? О_О
Anonymous
кодом
как вам там в 90х?
Vladimir
замечательно 😊
Vladimir
а вот с ксибами страдали
Stanislav
Енумы всякие и протоколы прикольные в свифте. В обжси суровый Си. Везде свои плюсы.
Вопрос. Есть у меня enum. Например enum Lol { case one(Int) case two(String) } есть два объекта: let obj1 = Lol.one(1) let obj2 = Lol.one(2) Как проверить, что они оба - одного кейса (one)?
Alex
как вам там в 90х?
Расскажи нам, как бы ты решал подобные задачи через IB https://www.youtube.com/watch?v=kyOm_dC038s
Alex
маразм крепчал?
Отличный ответ!
Anonymous
Отличный ответ!
я тебе не обязан никакие ответы на говновбросы давать
Anonymous
Вопрос. Есть у меня enum. Например enum Lol { case one(Int) case two(String) } есть два объекта: let obj1 = Lol.one(1) let obj2 = Lol.one(2) Как проверить, что они оба - одного кейса (one)?
полагаю switch (obj1, obj2) { case (.one(let obj1One), .one(let object2One)): ... и тут сравнивать case (.one(let obj1One), .two(let object2Two)): ... etc... } но это неточно
Stanislav
полагаю switch (obj1, obj2) { case (.one(let obj1One), .one(let object2One)): ... и тут сравнивать case (.one(let obj1One), .two(let object2Two)): ... etc... } но это неточно
Спасибо, в любом случае лучше моего костыля if case Lol.one(_) = obj1 { if case Lol.one(_) = obj2 { // ну вы поняли } }
Anonymous
if case внезапно! 😀
Anonymous
я и не знал
Stanislav
Кстати вдогонку. Сейчас мы определяем, что оба объекта именно кейса «one». А можно ли красиво определить, что они любого одинакового кейса?
Anonymous
%)
Никита
Друзья, помогите, пожалуйста. Очень нужна обратная связь по паре вопросов... Очень интересно мнение других людей:) Небольшой опрос про путешествия :) https://goo.gl/forms/NGJ4SRS5g16wripD2
Vladimir
Кстати вдогонку. Сейчас мы определяем, что оба объекта именно кейса «one». А можно ли красиво определить, что они любого одинакового кейса?
что-то типо такого enum Lol: Equatable { case one(Int) case two(String) } func ==(lhs: Lol, rhs: Lol) -> Bool { switch (lhs, rhs) { case (.one, .one): return true case (.two, .two): return true default: return false } }
Stanislav
Сейчас расскажу. Есть enum для хранения частей математического примера. Первый case это число (1, -5, 100), второй case это действие (умножить, сложить и т.д.) В моих простеньких математических выражениях всегда следующий порядок: число,действие,число(,действие,число)… Но пример из кусочков собирает пользователь. И он может попытаться добавить, к примеру, два знака подряд. Или два числа. И задача сводится к тому, что мне нужно знать, что это одинаковый case, но при этом мне пофиг на само значение
Stanislav
что-то типо такого enum Lol: Equatable { case one(Int) case two(String) } func ==(lhs: Lol, rhs: Lol) -> Bool { switch (lhs, rhs) { case (.one, .one): return true case (.two, .two): return true default: return false } }
А это норм, так == переопределять? Я понимаю, что происходит. Но если я захочу их сравнивать именно и по значению, как тогда быть? У меня сейчас немного не так сделано. == действительно сравнивает и тип, и значение. А для сравнения типов кейса я сделал отдельный метод func isSameType(_ obj:Lol) -> Bool
Vladimir
ну можно и так, эту логику перенести в отдельный метод )
Stanislav
я именно про логический смысл ==
Stanislav
static public func == (lhs: Step, rhs: Step) -> Bool { switch (lhs, rhs) { case (.rawNumber(let a), .rawNumber(let b)) where a == b: return true case (.action(let a), .action(let b)) where a == b: return true default: return false } } func isSameType(_ step:Step) -> Bool { if case .rawNumber = self, case .rawNumber = step { return true } if case .action = self, case .action = step { return true } return false; }
Stanislav
Собственно вот
Vladimir
👍
Stanislav
Ну все, тогда я спокоен, спасибо. А то вроде довольно простая ситуация, но не был уверен что все без костылей
Stanislav
Понял, в чем проблема: смешали в одном енуме операнды и операции. Вынеси операции (унарные, бинарные) в отдельный енум. У профессора Хаггерти в лекциях Stanford этот пример есть в классическом виде. Очень рекомендую.
Хм, ну у меня вот так. То есть есть enum для операций, и есть enum для шагов примера (где шаг - или операция, или число). А как надо? enum Action { case add case minus case divide case multiply } enum Step { case rawNumber(Int) case action(Action) }
Stanislav
2 + 3 представляется в виде массива Step’ов rawNumber, action, rawNumber
Anonymous
С телефона, ссыль не отправлю сейчас. На iTunesU забей в поиск Stanford iOS9 и там прям код есть вместе с лекциями
Stanislav
Ок, спасибо, посмотрю
Anonymous
Насчет сравнения без учета значения, у меня вот так
Paks
Paks
В iOS10 тот же пример есть, 1 и 2 лекции
Victor
Кто-нибудь сталкивался с проблемами синхронизации iCloud? Перестаёт синхронизироваться папка приложения в iCloud Drive, при этом остальные папки работают
Dry
Помогите разобраться, почему ругается на "ambiguous reference to member init" в строке super.init(texture: nil, color: .clear, size: initialSize) { import SpriteKit protocol GameSprite { var textureAtlas: SKTextureAtlas {get set} var initialSize: CGSize {get set} func onTap() } ______ class Bee: SKSpriteNode, GameSprite { var initialSize: CGSize = CGSize(width: 28, height: 24) var textureAtlas: SKTextureAtlas = SKTextureAtlas(named: "Enemies") var flyAnimation = SKAction() func onTap() { } init() { super.init(texture: nil, color: .clear, size: initialSize) { createAnimations() self.run(flyAnimation) }
Anonymous
>init() { super.init(texture: nil, color: .clear, size: initialSize) { createAnimations() self.run(flyAnimation) } ух ты, а так можно?
Dry
Судя по ошибке - нет ) но я не пойму почему.
Vlad
а ты реализуешь где-то свой инициализатор у базового класса?
Anonymous
интересно, а в super.init { self } будет считаться self для super
Anonymous
ну вы поняли
Dry
я и до этого вообще не понимал, а теперь совсем вообще
Anonymous
Dry
а ты реализуешь где-то свой инициализатор у базового класса?
вопрос не понял. для начинающих можно переформулировать?
Anonymous
Vlad
писал ли ты вручную функцию init в классах SKSpriteNode или GameSprite