Итак, вы поймали новый семя 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
чтобы сделать его более понятным для читателя, каково намерение здесь.
Таким образом, мы довольно раздражены тем, как продвигается эта вещь Свифта; почти каждая неоправданная болевая точка, кажется, адресована широкому удовлетворению вокруг трубок — так что, если вы задерживаетесь в прыжке, СЕЙЧАС может быть очень хорошее время для этого!