Согласна, статья получилась немного затянутой, но хотелось рассказать что-то более интересное, чем просто получение четных чисел с помощью filter(_:) или суммы чисел с помощью reduce(_:,_;).
Что касается Codable, то это АНТИпример того, куда может «завести» функциональный подход, например, для парсинга JSON. К сожалению, я не привела код, но это что-то типа:
Самостоятельно введенные операторы «композиции» функций сильно грузят систему вывода ТИПА из контекста (inference) и очень затягивают время компиляции.
Насколько же было гениальмым решение Codable по сравнению с функциональным подходом.
Я всегда имею ввиду этот пример при выборе решения в пользу протоколов.
Там ссылка 10-летней давности, когда был macOs Leopard, 10.5.
Сейчас 10.14.2 Mojave.
Для iPad написано прекрасное приложение WWDC с помощью OperationQueue.
Так что сейчас можно пользоваться, надежно.
Пока мне очень понравилось.
Посмотрим, что будет с произношением, когда вы будете читать код, здесь нужно быть очень аккуратным. Хотелось бы слышать английские слова с хорошим произношением.
Но в титрах, конечно, очень много ошибок.
Например, вмести «поле Team» у вас стоит “полетим” и т.д. Впрочем, в английском варианте титров тоже смешных ошибок хватает.
Потокобезопасностью «родных» состояний операции управляет механизм KVO, и именно для обеспечения его правильной работы в «ручном» режиме мы «изобрели» «жизненно» важное перечисление state. Никакие семафоры здесь нам не помогут.
Кроме того, одна и та же операция не может быть запущена дважды на OperationQueue.
Кстати, миграционный «робот» вас поправляет.
Вы определили «значение» для словаря как AnyObject (то есть ссылочный тип), так зачем же задать «0» (value тип)?
В вашем примере словарь, который был в Swift 2 [String: AnyObject] превращается в Swift 3 в словарь [String :Any], что в зависимости от дальнейшего кода может привести к ощибке на этапе выполнения.
В моем случае словарь как был [String: AnyObject] так и остался [String: AnyObject], что не приведет к ошибке при выполнении кода. И это различие важно для выполнения кода без ошибки.
Да, код 0 as AnyObject? мне не нравится, но я же сказала, что «робот» слишком озабочен тем, чтобы сохранить код работоспособным. Иногда это излишне, как в этом случае и в случае приведенном в статье, когда он вставляет кучу лишнего кода, лишь бы сохранить вам возможность сравнивать Optional значения. Поэтому требуется ручная работа.
Зная такую логику работы миграционного «робота», ручные правки кода сделать легко.
У вас устаревшая информация.
Xcode 8.1 ведет себя по-другому
var parameters = [String: AnyObject]()
parameters["skip"] = 0 as AnyObject?
Если вы использовали Xcode 8.0, то я вас понимаю, там действительно было ошибок и предупреждений на два экрана.
Я специально написала про версию Xcode 8.1 и 8.2 — все кардинально изменилось.
Если дадите ссылку на ваш код на Swift 2.2 — буду признательна. Просто хочу убедиться, что миграционный «робот» в Xcode 8.1 и 8.2 улучшился существенно.
Это действительно увлекательно.
Вы пробовали программировать хоть что-нибудь на Swift? Уверена, что нет. Если вы напишете что-то на нем, вы уже не перейдете обратно на Objective-C никогда, даже если вам придется переходить от версии к версии. Я очень люблю Objective-C, но ни один новый проект не начну на Objective-C. И хотите вы этого или нет, а Objective-C уйдет. Поэтому вместо того, чтобы вести бессмысленные подсчеты, учитесь программировать на Swift. Желаю удачи.
Вы не поняли о чем идем речь или не до конца дочитали. Код-то как раз компилируется и миграционный «робот» делает для этого все возможное и фантастически невозможное, но в некоторых случаях код можно сделать более эффективным и в статье показано по каким направлениям нужно смотреть.
Swift 3 очень даже добавил энтузиазма. Язык великолепен, и несмотря на то, что нас так пугали, что Swift 3 слишком далеко отстоит от Swift 2, переход на Swift 3 оказался очень легким и приятным, а ведь там поменялись практически все имена функций и не только. Думаю, что переход на Swift 4 вообще будет без проблем, потому что именно в Swift 3 они далеко «отъехали» от Objective-C.
Я не большой специалист по компилятором, но приведу дословно как ставится первостепенная задача:
to provide source stability for Swift 3 code and to provide ABI stability for the Swift standard library.
Это то, что вы имели ввиду?
Да. Обещают к весне 2017 обеспечить ABI стабильность и возможность работы с Swift 4 и Swift 3. Swift Programming Language Evolution
Поставлена как первостепенная задача.
filter(_:)
или суммы чисел с помощьюreduce(_:,_;)
.Что касается
Codable
, то это АНТИпример того, куда может «завести» функциональный подход, например, для парсинга JSON. К сожалению, я не привела код, но это что-то типа:blog <*> int(dict,"id")
<*> string(dict,"name")
<*> bool(dict,"needspassword")
<*> (string(dict, "url") >>= toURL
Самостоятельно введенные операторы «композиции» функций сильно грузят систему вывода ТИПА из контекста (inference) и очень затягивают время компиляции.
Насколько же было гениальмым решение
Codable
по сравнению с функциональным подходом.Я всегда имею ввиду этот пример при выборе решения в пользу протоколов.
www.youtube.com/watch?v=M4n7u0txGDM
Ссылка на WWDC приложение на iPad — itunes.apple.com/ru/app/wwdc/id640199958?mt=8
Сейчас 10.14.2 Mojave.
Для iPad написано прекрасное приложение WWDC с помощью OperationQueue.
Так что сейчас можно пользоваться, надежно.
Посмотрим, что будет с произношением, когда вы будете читать код, здесь нужно быть очень аккуратным. Хотелось бы слышать английские слова с хорошим произношением.
Но в титрах, конечно, очень много ошибок.
Например, вмести «поле Team» у вас стоит “полетим” и т.д. Впрочем, в английском варианте титров тоже смешных ошибок хватает.
Кроме того, одна и та же операция не может быть запущена дважды на OperationQueue.
RxSwift интересуюсь давно, но мне кажется на Хабре много материала на эту тему и очень хорошего:
RxSwift: работа с GUI
RxSwift шпаргалка по операторам (+ PDF)
или
Второй вариант мне кажется больше логичным.
Вы определили «значение» для словаря как AnyObject (то есть ссылочный тип), так зачем же задать «0» (value тип)?
В моем случае словарь как был [String: AnyObject] так и остался [String: AnyObject], что не приведет к ошибке при выполнении кода. И это различие важно для выполнения кода без ошибки.
Да, код 0 as AnyObject? мне не нравится, но я же сказала, что «робот» слишком озабочен тем, чтобы сохранить код работоспособным. Иногда это излишне, как в этом случае и в случае приведенном в статье, когда он вставляет кучу лишнего кода, лишь бы сохранить вам возможность сравнивать Optional значения. Поэтому требуется ручная работа.
Зная такую логику работы миграционного «робота», ручные правки кода сделать легко.
Xcode 8.1 ведет себя по-другому
Если вы использовали Xcode 8.0, то я вас понимаю, там действительно было ошибок и предупреждений на два экрана.
Я специально написала про версию Xcode 8.1 и 8.2 — все кардинально изменилось.
Если дадите ссылку на ваш код на Swift 2.2 — буду признательна. Просто хочу убедиться, что миграционный «робот» в Xcode 8.1 и 8.2 улучшился существенно.
Это действительно увлекательно.
to provide source stability for Swift 3 code and to provide ABI stability for the Swift standard library.
Это то, что вы имели ввиду?
Swift Programming Language Evolution
Поставлена как первостепенная задача.