为什么Swiftui中此变量的值后面有括号?

为什么Swiftui中此变量的值后面有括号?,swift,swiftui,Swift,Swiftui,为什么Swiftui中entries变量的值后面有括号?这是什么意思 func barChartItems() -> [ChartDataEntry] { var entries = [ChartDataEntry]() ... } 这只是一种语法,用于创建类型为ChartDataEntrytype的空类型数组的对象 具体来说,声明后面的括号是类或类型的init()方法调用。由于可以在不使用任何init变量的情况下创建数组类型,因此初始化数组类型时不需要这些变量,事实上

为什么Swiftui中entries变量的值后面有括号?这是什么意思

func barChartItems() -> [ChartDataEntry] {
    var entries = [ChartDataEntry]()
    ...
}

这只是一种语法,用于创建类型为
ChartDataEntry
type的空类型数组的对象


具体来说,声明后面的括号是类或类型的init()方法调用。由于可以在不使用任何init变量的情况下创建数组类型,因此初始化数组类型时不需要这些变量,事实上,如果不传递任何内容,Swift最佳做法是不添加它们:

对于类,始终需要使用括号从类创建对象实例

我构建了一个带有@Observable类的小型SwiftUI示例,该类具有多个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()
        }
    }
}

这是数组结构所符合的
RangeReplaceableCollection
协议所需的空init()。这与我更喜欢的
var条目:[ChartDataEntry]=[]
相同。
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()
        }
    }
}