Почему после значения этой переменной в Swiftui стоят круглые скобки?

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