Шрифт SwiftUI.Подборщик дизайна

#swiftui #enums #picker

Вопрос:

Кто-нибудь знает правильный способ зациклить 4 перечисленных значения для шрифта SwiftUI.Дизайн в подборщике, чтобы выбрать их для интерфейса ?

Возможности :

 case `default`
case monospaced
case rounded
case serif
 

Например :

 Picker("Font design", selection: $vm.fontDesign, content: {
    ForEach(Font.Design, id:.self) { design in
        Text(design.rawValue).tag(design)
    }
})
 

И в модели представления :

 @Published var fontDesign: Font.Design = .rounded
 

Заранее спасибо!

Ответ №1:

Вам нужно расширить Font.Design , чтобы соответствовать caseIterable :

 extension Font.Design: CaseIterable {
    public static var allCases: [Font.Design]{
        [.default, .monospaced, .rounded, .serif]
    }
}
 

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

1. Большое вам СПАСИБО @Yrb ! Это работает как заклинание ! Скоро (или поздно) Я буду там 🙂

2. Мне буквально только что пришлось сделать подобное для приложения, над которым я работаю.

3. Я был уверен, что с расширением это возможно, но не знал процесса. Ваш пост помогает понять, как это сделать. Еще раз спасибо.

Ответ №2:

Окончательный код будет выглядеть следующим образом (чтобы получить строковые значения для средства выбора) :

 extension Font.Design: CaseIterable {
    public static var allCases: [Font.Design] {
        [.default, .monospaced, .rounded, .serif]
    }
    var design: String {
        switch self {
            case .default:
                return "default"
            case .monospaced:
                return "monospaced"
            case .rounded:
                return "rounded"
            case .serif:
                return "serif"
            default:
                return "default"
        }
    }
}
 

Вид :

 Picker("fontDesign", selection: $vm.fontDesign, content: {
    ForEach(Font.Design.allCases, id:.self) { font in
        Text("(font.design)").tag(font)
    }
})