В прошлой статье о разработке приложений на SwiftUI я использовал следующий макрос вокруг блок кода, чтобы он соответсвенно присутствовал только в сборке под Catalyst:
1 |
#if targetEnvironment(macCatalyst) if let titlebar = windowScene.titlebar { titlebar.titleVisibility = .hidden titlebar.toolbar = nil } #endif |
Подобных макросов в Swift и SwiftUI несколько, например, есть еще
1 2 3 |
#if os(iOS) ... #endif |
Так как не все API в SwiftUI доступны на всех платформах, то макросы оказываются крайне полезными. Приведу живой пример: focusable
– это модификатор,
недоступный на iOS.
1 2 3 4 5 |
@available(macOS 10.15, tvOS 13.0, watchOS 6.0, *) @available(iOS, unavailable) extension View { public func focusable(_ isFocusable: Bool = true, onFocusChange: @escaping (Bool) -> Void = { _ in }) -> some View } |
Раз так, то если вы пишите код, который должен работать на всех платформах, то вам необходимо обернуть этот модификатор проверяющим макросом.
Да вот беда: сделать этого нельзя! Подобные строки добавленные в цепочку модификаторов вызывают ошибку компиляции: