Статьи

Быстро улучшается

Итак, вы поймали  новый семя Swift 1.2  ? Если нет, похоже, мы могли бы назвать это  релизом Daft Punk :

  • Сложнее — «исправлены сбои компилятора», «меньше предупреждений SourceKit»…
  • Лучше — «Исходные файлы, которые не были изменены, больше не будут перекомпилироваться по умолчанию…»
  • Быстрее — «Отладочные сборки производят двоичные файлы, которые работают значительно быстрее, и новые оптимизации …»
  • Сильнее — «язык был доработан для обеспечения безопасного и предсказуемого поведения. Мы также продолжаем улучшать взаимодействие между Swift и Objective-C… »

Время перейти к последнему раунду переписывания! Вот подборка хороших обсуждений этих «усовершенствованных» деталей:

NSHipster’s  Swift 1.2

RayWenderlich.com:  что нового в Swift 1.2?

SwiftDoc.org «s  обновление контента Major для Swift 1.2

Поговорим о наборах, детка!

Изменения в стандартной библиотеке Swift в 1.2 бета 1

Производительность Swift 1.2: довольно хорошо

Пример использования производительности на Swift 1.1, Swift 1.2 и Objective-C

Кроме того, мы хотели бы обратить ваше внимание на пару до сих пор вообще пропущенных моментов, которые появились на досках объявлений и в списках рассылки. Во-первых, супепед, если позволить

Конструкция «if let» была расширена, чтобы позволить тестировать несколько дополнительных опций и защищать условия в одном операторе if (или while) с использованием синтаксиса, аналогичного общим ограничениям:

if let a = foo(), b = bar() where a < b, let c = baz() {}

Это позволяет вам тестировать несколько дополнительных опций и включать промежуточные логические условия, не вводя нежелательных вложений (то есть, чтобы избежать «пирамиды гибели»). (19382942)

на самом деле лучше, чем те записи, которые ясно дают понять:

  • может быть произвольным числом предложений let + where в одном выражении
  • также может использоваться с ‘если var’, если вы хотите изменить значения в условиях
  • также можно использовать полный оператор множественного предложения в цикле while!

Этого должно быть достаточно, чтобы выразительность условного потока успокоила все ворчание на этом фронте.

Далее, если вы чересчур громко добавляете новые аннотации контракта возвращаемой стоимости к своим устаревшим заголовкам Objective-C, «обнуляемость» — пока недокументированная функция лягушки для этого, так что вот представляемый в настоящее время способ добавить это к производственному коду, от Jens Alfke в списке Xcode:

Итак, магический вызов, который я помещаю в заголовочные файлы (после #include):

#if __has_feature(nullability) // Xcode 6.3+
#pragma clang assume_nonnull begin
#else
#define nullable
#define __nullable
#endif

… interface declarations go here…

#if __has_feature(nullability)
#pragma clang assume_nonnull end
#endif

В объявлениях свойств вам нужно сделать «nullable» последним метаатрибутом, иначе вы получите синтаксические ошибки в более ранних версиях Xcode; так, например, «(только чтение, неатомный, обнуляемый)» работает, но «(только чтение, обнуляемый, неатомный)» является синтаксической ошибкой, потому что в Xcode 6.1 парсер увидит две соседние запятые.

[Это работает хорошо, но при конвертации моих интерфейсов я обнаружил неприятную ошибку компилятора, которую я собираюсь отправить в Apple — если вы объявите несколько свойств в одной строке, добавление атрибута (nullable) приведет к блокировке анализатора в бесконечном цикле:
@property (только для чтения, обнуляемый) id a, b, c; // не делай этого!
Я провел около часа с вентилятором MBP, работающим на полной скорости, прежде чем выяснить, какая именно линия сработала.]

И, наконец, одно из наиболее тонких последствий очистки в режиме бездействия Swift 1.2 заключается в том, что вы больше не можете использовать его без проблем? в качестве постфикса для необязательного необязательного, например, при использовании map в необязательном поиске в словаре

let x:Int? = dict.map { $0["a"] }?

Крис Латтнер одобрил способ переписать этот шаблон для 1.2

let x:Int? = dict.map { $0["a"] } ?? nil

чтобы сделать его более понятным для читателя, каково намерение здесь.

Таким образом, мы довольно раздражены тем, как продвигается эта вещь Свифта; почти каждая неоправданная болевая точка, кажется, адресована широкому удовлетворению вокруг трубок — так что, если вы задерживаетесь в прыжке,  СЕЙЧАС  может быть очень хорошее время для этого!