Как стать автором
Обновить
54
0

Пользователь

Отправить сообщение
Одна из причин использования @escaping — асинхронное выполнение кода. Если вы используете замыкание асинхронно с помощью DispatchQueгу, то очередь queue будет удерживать ваше замыкание в памяти для того, чтобы использовать его в будущем. В этом случае вы не можете точно сказать, когда замыкание будет выполнено. Все Generic map имеют @escaping замыкание, так как заранее неизвестно в какой среде вы будете его использовать.
Согласна, статья получилась немного затянутой, но хотелось рассказать что-то более интересное, чем просто получение четных чисел с помощью filter(_:) или суммы чисел с помощью reduce(_:,_;).
Что касается Codable, то это АНТИпример того, куда может «завести» функциональный подход, например, для парсинга JSON. К сожалению, я не привела код, но это что-то типа:

blog <*> int(dict,"id")
<*> string(dict,"name")
<*> bool(dict,"needspassword")
<*> (string(dict, "url") >>= toURL


Самостоятельно введенные операторы «композиции» функций сильно грузят систему вывода ТИПА из контекста (inference) и очень затягивают время компиляции.
Насколько же было гениальмым решение Codable по сравнению с функциональным подходом.
Я всегда имею ввиду этот пример при выборе решения в пользу протоколов.
Еще посмотрите это на YouTube
www.youtube.com/watch?v=M4n7u0txGDM
Смотрите видео WWDC 2015 developer.apple.com/videos/play/wwdc2015/226 «Advanced NSOperation» 8- ая минута и далее.
Ссылка на WWDC приложение на iPad — itunes.apple.com/ru/app/wwdc/id640199958?mt=8
Там ссылка 10-летней давности, когда был macOs Leopard, 10.5.
Сейчас 10.14.2 Mojave.
Для iPad написано прекрасное приложение WWDC с помощью OperationQueue.
Так что сейчас можно пользоваться, надежно.
Пока мне очень понравилось.
Посмотрим, что будет с произношением, когда вы будете читать код, здесь нужно быть очень аккуратным. Хотелось бы слышать английские слова с хорошим произношением.
Но в титрах, конечно, очень много ошибок.
Например, вмести «поле Team» у вас стоит “полетим” и т.д. Впрочем, в английском варианте титров тоже смешных ошибок хватает.
Потокобезопасностью «родных» состояний операции управляет механизм KVO, и именно для обеспечения его правильной работы в «ручном» режиме мы «изобрели» «жизненно» важное перечисление state. Никакие семафоры здесь нам не помогут.
Кроме того, одна и та же операция не может быть запущена дважды на OperationQueue.
Моя следующая статья будет об Operation.
RxSwift интересуюсь давно, но мне кажется на Хабре много материала на эту тему и очень хорошего:
RxSwift: работа с GUI
RxSwift шпаргалка по операторам (+ PDF)
В Swift 3 независимо от миргационного «робота» (так компилятор работает) правильный код такой:

var parameters =  [String: AnyObject]()
 parameters["skip"] = 0 as AnyObject?


или

var parameters =  [String: Any]()
 parameters["skip"] = 0 


Второй вариант мне кажется больше логичным.
Кстати, миграционный «робот» вас поправляет.
Вы определили «значение» для словаря как 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 улучшился существенно.
Это действительно увлекательно.
Где продают Mac с оперативной памятью 50 gb?
Может что-то не так с проектом? Памяти 50+ gb?
Вы пробовали программировать хоть что-нибудь на 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
Поставлена как первостепенная задача.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность