#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)
}
})