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

var body: some View {
    ZStack {
        ...
    }
#if !os(iOS) /// -> Unexpected platform condition (expected 'os', 'arch', or 'swift')
    .focusable()
#endif
}

Как же быть? Выход есть, его не может не быть! Чтобы не повторяться в коде, достаточно сделать небольшой хэлпер с помощью протокола ViewModifier, в примитивном виде он может быть таким:

struct FocusableView: ViewModifier {
    func body(content: Content) -> some View {
        #if os(iOS)
        return content
        #else
        return content
            .focusable()
        #endif
    }
}

Теперь ваш оригинальный код компонента не требуется дублировать или оборачивать в излишние проверки:

var body: some View {
    ZStack {
        ...
    }
    .modifier(FocusableView())
}

Точно такой же подход я практикую со всеми другими модификаторами, доступными в зависимости от платформы. Легко и просто!

Страницы: 1 2


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

в

от

Метки:

Комментарии

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