Применение макросов к модификаторам в SwiftUI

В прошлой статье о разработке приложений на SwiftUI я использовал следующий макрос вокруг блок кода, чтобы он соответсвенно присутствовал только в сборке под Catalyst:

#if targetEnvironment(macCatalyst) if let titlebar = windowScene.titlebar { titlebar.titleVisibility = .hidden titlebar.toolbar = nil } #endif

Подобных макросов в Swift и SwiftUI несколько, например, есть еще

#if os(iOS)
...
#endif

Так как не все API в SwiftUI доступны на всех платформах, то макросы оказываются крайне полезными. Приведу живой пример: focusable – это модификатор, недоступный на iOS.

@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
}

Раз так, то если вы пишите код, который должен работать на всех платформах, то вам необходимо обернуть этот модификатор проверяющим макросом.

Да вот беда: сделать этого нельзя! Подобные строки добавленные в цепочку модификаторов вызывают ошибку компиляции:

Страницы: 1 2


Опубликовано

в

от

Метки:

Комментарии

Добавить комментарий