【问题标题】:Why are there parenthesis after the value of this variable in Swiftui?为什么Swiftui中这个变量的值后面有括号?
【发布时间】:2021-03-24 14:15:40
【问题描述】:

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

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

【问题讨论】:

  • 这是Array结构符合的RangeReplaceableCollection协议要求的空init()。
  • 这和我更喜欢的var entries: [ChartDataEntry] = []一样。

标签: swift swiftui


【解决方案1】:

具体来说,声明后面的括号是类或类型的 init() 方法调用。因为 Array 类型可以在没有任何 init 变量的情况下创建,所以它们不需要初始化 Array 类型,事实上 Swift 的最佳实践是如果你没有传递任何东西就不要添加它们: https://developer.apple.com/documentation/swift/array

在类的情况下,你总是需要括号来从类中创建一个对象实例。

我使用具有多个 init() 选项的 @Observable 类构建了一个小型 SwiftUI 示例。您可以通过调用不同的初始化程序来查看 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()
        }
    }
}

【讨论】:

    【解决方案2】:

    这只是创建ChartDataEntry 类型的空类型数组对象的语法。

    Creating an Empty Array

    var someInts = [Int]() // an empty array of Int
    

    【讨论】:

      猜你喜欢
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多