Обновить

Комментарии 5

ЗакрепленныеЗакреплённые комментарии

Немного углубимся в настройки.

Вы немного не те настройки показываете. Swift 6.0 основные настройки вот эти, которые появились в Xcode 16.2 когда вышел Swift 6.0

Default Actor Isolation появилось только в Swift 6.2 (Xcode 26)

Поэтому переход на Swift 6 рекомендуют делать так (а не всё разом включать):

  1. Оставляем Swift 5

  2. В Swift Compiler - Upcoming Features включаем одну из фич Swift 6 (напимер Isolated Global Variables выставляем в Yes)

  3. В Swift 5 режиме новая фича Swift 6 будет подсвечена варнингом если найдется для нее проблема. Фиксим ее

  4. Включаем следующую фичу Swift 6 и фиксим проблемы

  5. Когда включили все флаги и пофиксили проблемы, то можно включать Swift 6

Похоже, вы правы, спасибо, что обратили внимание! Я руководствовался исключительно личными экспериментами, стоило изучить тему дополнительно.

Когда переводишь на Swift 6 (в Swift Compiler - Language), все правила с пометкой в (SWIFT_UPCOMING_FEATURE_6_0) сразу включаются. На примере мини приложения ошибок возникло немного и решать их было несложно, при работе с коммерческим проектом или пакетом корректно будет включать правила по одному и только потом менять версию языка.

Еще раз спасибо!

Немного углубимся в настройки.

Вы немного не те настройки показываете. Swift 6.0 основные настройки вот эти, которые появились в Xcode 16.2 когда вышел Swift 6.0

Default Actor Isolation появилось только в Swift 6.2 (Xcode 26)

Поэтому переход на Swift 6 рекомендуют делать так (а не всё разом включать):

  1. Оставляем Swift 5

  2. В Swift Compiler - Upcoming Features включаем одну из фич Swift 6 (напимер Isolated Global Variables выставляем в Yes)

  3. В Swift 5 режиме новая фича Swift 6 будет подсвечена варнингом если найдется для нее проблема. Фиксим ее

  4. Включаем следующую фичу Swift 6 и фиксим проблемы

  5. Когда включили все флаги и пофиксили проблемы, то можно включать Swift 6

Похоже, вы правы, спасибо, что обратили внимание! Я руководствовался исключительно личными экспериментами, стоило изучить тему дополнительно.

Когда переводишь на Swift 6 (в Swift Compiler - Language), все правила с пометкой в (SWIFT_UPCOMING_FEATURE_6_0) сразу включаются. На примере мини приложения ошибок возникло немного и решать их было несложно, при работе с коммерческим проектом или пакетом корректно будет включать правила по одному и только потом менять версию языка.

Еще раз спасибо!

Перейдем к сервису JokesService, который обрабатывает запросы и создает модели для отображения, и сделаем с ним примерно те же изменения. Начнем с метода getJoke.

нейросеть писала данную статью? У вас getJoke c completion блоком может вызвать этот completion дважды.
Не говоря уже о том, что условие:

response.statusCode < 200 || response.statusCode >= 300

превратилось в:

!(200..<300).contains(response.statusCode)

И так, и так правильно, но вы же акцентируете внимание на переход к async-await. Зачем еще дополнительно менять остальной код?

  1. Писал я.

  2. Дважды handler не вызовется. Поскольку формат ответа может быть разный, одновременно две структуры декодировать не выйдет, но для чистоты можно было второй if переделать в else if. Не думаю, что критично, но поправлю.

  3. Когда переписывал, решил сократить длину строки. Но для наглядности изменений можно было и оставить. Так же не вижу серьезной сложности в восприятии, но поправлю.

handler вызовется дважды в случае, когда json содержит достаточный набор полей, необходимых для инициализации любой из двух структур. Совсем не обязательно, чтобы там были 2 разных формата ответа

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации