SwiftUI ERR: "Название аргумента должно предшествовать аргументу style"
Я работаю над пакетом, который имеет множество настраиваемых параметров со значениями по умолчанию. Учитывая, что существует так много потенциальных инициализаторов, при изменении многих параметров может быстро сбиться с толку правильный порядок всего.
У меня вопрос из двух частей:
- Есть ли способ удалить требование заказа из инициализации?
- Если нет - есть ли лучший способ структурировать пользовательские параметры для этого пакета? Что рекомендуют другие разработчики?
Я рассматривал возможность использования модификаторов представления, но не уверен, насколько эффективно это сработает при такой структуре пакета.
Инициализация и использование структуры приведены ниже.
public struct LineChart: View {
public var data: [Double]
public var title: String?
public var subtitle: String?
public var floatingPointNumberFormat: String
public var cursorColor: Color
public var curvedLines: Bool
public var displayChartStats: Bool
public var minWidth: CGFloat
public var minHeight: CGFloat
public var maxWidth: CGFloat
public var maxHeight: CGFloat
public var titleFont: Font
public var subtitleFont: Font
public var priceFont: Font
public var fullScreen: Bool
private var chartStyle: ChartStyle = Styles.lineChartStyleOne
public init (data: [Double],
title: String? = nil,
subtitle: String? = nil,
style: LineChartStyle? = .primary,
curvedLines: Bool = true,
cursorColor: Color = Colors.IndicatorKnob,
displayChartStats: Bool = false,
minWidth: CGFloat = 0,
minHeight: CGFloat = 0,
maxWidth: CGFloat = .infinity,
maxHeight: CGFloat = .infinity,
titleFont: Font = .system(size: 30, weight: .regular, design: .rounded),
subtitleFont: Font = .system(size: 14, weight: .light, design: .rounded),
dataFont: Font = .system(size: 16, weight: .bold, design: .monospaced),
floatingPointNumberFormat: String = "%.1f",
fullScreen: Bool = false) {
// Assign data
self.data = data
self.title = title
self.subtitle = subtitle
self.floatingPointNumberFormat = floatingPointNumberFormat
self.cursorColor = cursorColor
self.curvedLines = curvedLines
self.displayChartStats = displayChartStats
self.minHeight = minHeight
self.minWidth = minWidth
self.maxHeight = maxHeight
self.maxWidth = maxWidth
self.subtitleFont = subtitleFont
self.titleFont = titleFont
self.priceFont = dataFont
self.fullScreen = fullScreen
switch style {
case .custom(let customStyle): self.chartStyle = customStyle
case .primary: self.chartStyle = Styles.lineChartStyleTwo
case .secondary: self.chartStyle = Styles.lineChartStyleThree
case .tertiary: self.chartStyle = Styles.lineChartStyleFour
default: self.chartStyle = Styles.lineChartStyleOne
}
}
public var body: some View {
LineChartView(data: self.data, title: self.title, legend: self.subtitle, style: self.chartStyle, valueSpecifier: self.floatingPointNumberFormat, cursorColor: self.cursorColor, curvedLines: self.curvedLines, displayChartStats: self.displayChartStats, minWidth: self.minWidth, minHeight: self.minHeight, maxWidth: self.maxWidth, maxHeight: maxHeight, titleFont: self.titleFont, subtitleFont: self.subtitleFont, priceFont: self.priceFont)
}
}