【问题标题】:Inconsistencies of ObservableObject with variable declarationObservableObject 与变量声明不一致
【发布时间】:2021-10-09 06:40:45
【问题描述】:

我是 swift 新手,我想了解我在此声明中遇到的一个错误:

struct User: Codable, Identifiable {
    var id: Int

    var first_name: String
    var last_name: String
}

有了这个声明:

class Data: ObservableObject {
    
    @Published var user = User()
}

我得到:

Missing argument for parameter 'from' in call

Insert 'from: <#Decoder#>'

虽然我没有收到任何错误:


class Data: ObservableObject {
    
    @Published var user = [User]()
}

【问题讨论】:

  • 您没有使用编译器为您创建的任何 init 方法(一个带有用于所有属性的参数,一个用于 Codable)用于 User 结构,但一个没有参数。在第二种情况下,您正在为 Array 使用有效的现有 init。我可以解释更多,但我认为最好的办法是让您了解更多有关 init 方法的信息,因为它们是 swift 编程的重要组成部分
  • 我唯一不明白的是为什么它是数组时不会抛出错误!
  • 你应该阅读this chapter Swift Programming Language 书中关于初始化器的内容
  • 因为您没有创建任何用户对象,所以您在第二个示例中创建了一个空数组

标签: arrays swift swiftui


【解决方案1】:

对于这种情况,您需要显式初始化器,例如

struct User: Codable, Identifiable {
    var id: Int

    var first_name: String
    var last_name: String

   init(id: Int = 0, firstName: String = "", lastName: String = "") {
      self.id = id
      self.first_name = firstName
      self.last_name = lastName
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    相关资源
    最近更新 更多