Найти в Дзене

WWDC 2023, чего ждать

Apple уже опубликовала анонс WWDC 2023, который пройдет 5-9 июня: https://developer.apple.com/wwdc23/. А это значит, что время загадывать и угадывать, что же нового нам представят из инструментария iOS SDK. И начнем мы со Swift 5.8, который вышел официально https://www.swift.org/blog/swift-5.8-released/ . В новой версии появились доработки, связанные как с самим sdk и Swift, так и SPM, инструментом документации и SwiftSyntax. Часть новинок уже разобрал у себя Пол Хадсон (https://www.hackingwithswift.com/articles/256/whats-new-in-swift-5-8) https://debash.medium.com/swift-5-8-что-нового-ff0d55d6238b https://byby.dev/swift-58 1. SDK SE-0274: Concise magic file names - краткие псевдонимы для файлов С помощью #file теперь можно будет включить вывод пути к исходному файлу в формате Module/<filename>.swift // New behavior, when enabled print(#file) // Old behavior, when needed print(#filePath) SE-0362: Piecemeal adoption of upcoming language improvements - в этой фиче появляется флаг компил

Apple уже опубликовала анонс WWDC 2023, который пройдет 5-9 июня:

https://developer.apple.com/wwdc23/. А это значит, что время загадывать и угадывать, что же нового нам представят из инструментария iOS SDK.

И начнем мы со Swift 5.8, который вышел официально https://www.swift.org/blog/swift-5.8-released/ . В новой версии появились доработки, связанные как с самим sdk и Swift, так и SPM, инструментом документации и SwiftSyntax.

Часть новинок уже разобрал у себя Пол Хадсон (https://www.hackingwithswift.com/articles/256/whats-new-in-swift-5-8)

https://debash.medium.com/swift-5-8-что-нового-ff0d55d6238b

https://byby.dev/swift-58

1. SDK

SE-0274: Concise magic file names - краткие псевдонимы для файлов

С помощью #file теперь можно будет включить вывод пути к исходному файлу в формате Module/<filename>.swift

// New behavior, when enabled

print(#file)

// Old behavior, when needed

print(#filePath)

SE-0362: Piecemeal adoption of upcoming language improvements - в этой фиче появляется флаг компиляции -enable-upcoming-feature X, где X - имя фичи в формате UpperCamelCaseFeatureName. Например, так мы можем брать что-то из разработки под Swift 6 для Swift 5.8

SE-0365: Allow implicit self for weak self captures, after self is unwrapped - Неявное использование self для слабых ссылок после их развертывания

class ViewController {

let button: Button

func setup() {

button.tapHandler = { [weak self] in

guard let self else { return }

dismiss()

}

}

func dismiss() { ... }

}

SE-0367: Conditional compilation for attributes - условная компиляция атрибутов

#if compiler(>=9999) && COMPILATION_CONDITION

public typealias IntegerLiteralType = StaticBigInt

#else

public typealias IntegerLiteralType = UInt64

#endif

SE-0368: StaticBigInt - новый тип для больших Int

SE-0369: Add CustomDebugStringConvertible conformance to AnyKeyPath - добавляет соответствие протоколу CustomDebugStringConvertible для AnyKeyPath. Это позволит отображать отладочную ссылку как \ParentTypeName.PropertyName. Сейчас этот путь отображается как KeyPath<ParentTypeName, PropertyTypeName>

SE-0370: Pointer Family Initialization Improvements and Better Buffer Slices

SE-0372: Document Sorting as Stable - касается функций сортировки в Swift. Теперь они официально отмечены как “устойчивые”. Это означает, что элементы, которые равны по значению, будут оставаться в том же порядке, в котором были в исходном массиве после сортировки.

SE-0373: Lift all limitations on variables in result builders - Снятие ограничений на переменные в теле замыкающих выражений. Ослабляет некоторые ограничения на переменные, используемые в теле замыкающих выражений, позволяя писать код, который ранее возвращал ошибку компиляции.

**SE-0374: Add sleep(for:) to Clock**- решает дисбаланс в API между интерфейсами sleep для clock и tasks. Добавленный API позволяет работать с duration, что решает проблему:

let clock: any Clock<Duration> = ContinuousClock()

// Duration-based

try await clock.sleep(for: .seconds(1))

SE-0375: Opening existential arguments to optional parameters - Открытие существующих аргументов для опциональных параметров.

Исправляет проблему, связанную с использованием дженерик)функций с опциональными значениями. В версии Swift 5.7 использование протоколов для вызова универсальных функций не работало с опциональными значениями, но теперь в Swift 5.8 это исправлено

func optionalDouble<T: Numeric>(_ number: T?) -> T {

let numberToDouble = number ?? 0

return numberToDouble * 2

}

let first = 1

let second = 2.0

let third: Float = 3

let numbers: [any Numeric] = [first, second, third]

for number in numbers {

print(optionalDouble(number))

}

SE-0376: Function Back Deployment - Обратное развёртывание функции

SE-0376 добавляет новый атрибут @backDeployed, который позволяет использовать новые API в более старых версиях фреймворков. Благодаря этому атрибуту код функции записывается в двоичный файл приложения и уже в рантайме в зависимости от версии iOS используется либо заранее подготовленный файл, либо нативная реализация нового API.

При этом надо понимать, что @backDeployed применяется только к функциям, методам, сабскриптам и вычисляемым свойствам.

SE-0381: DiscardingTaskGroups позволит создавать группы задач, отбрасывающие дочерние задачи сразу после их завершения вместо явного использования await.

Swift Package Manager

SE-0362: Piecemeal adoption of upcoming language improvements

SE-0378: Package Registry Authentication