#swift #swiftui
#swift #swiftui
Вопрос:
Почему после значения переменной entries в Swiftui стоят круглые скобки? Что это значит?
func barChartItems() -> [ChartDataEntry] {
var entries = [ChartDataEntry]()
...
}
Комментарии:
1. Это пустой init(), требуемый
RangeReplaceableCollection
протоколом, которому соответствует структура массива.2. Это то же самое,
var entries: [ChartDataEntry] = []
что я предпочитаю.
Ответ №1:
Это просто синтаксис для создания объекта пустого типизированного массива ChartDataEntry
типа.
var someInts = [Int]() // an empty array of Int
Ответ №2:
В частности, скобка, следующая за объявлением, является вызовом метода init() для класса или типа. Поскольку тип массива может быть создан без каких-либо переменных инициализации, они не нужны для инициализации типа массива, на самом деле лучшей практикой Swift является не добавлять их, если вы ничего не передаете: https://developer.apple.com/documentation/swift/array
В случае класса вам всегда нужны круглые скобки для создания экземпляра объекта из класса.
Я создал небольшой пример SwiftUI с классом @Observable, который имеет несколько опций init() . Вы можете видеть, как параметры init() могут изменять свойства объекта, вызывая разные инициализаторы:
class MultipleInitOptions:ObservableObject {
@Published var name = "hard coded name"
init(){} // has no parameters, just use empty parenthesis
init(name:String) { // has parameters, pass in a name parameter inside parenthesis
self.name = name
}
}
struct TesterView: View {
@StateObject var hardCoded = MultipleInitOptions()
@StateObject var custom = MultipleInitOptions(name:"custom name")
var body: some View {
VStack {
Text("(hardCoded.name)")
.padding()
Text("(custom.name)")
.padding()
}
}
}