【问题标题】:Swift: Variable used before being initialized [duplicate]Swift:初始化之前使用的变量[重复]
【发布时间】:2021-09-23 10:36:41
【问题描述】:

我收到以下编译错误: “变量‘self.entryData’在初始化之前使用” 如何修复它并在我的 init 方法中正确初始化 @state var entryData?

struct EditEntryView: View {
    @Environment(\.managedObjectContext) private var viewContext
    @State var entryData: EditEntryData
    @ObservedObject var moneyEntry: MoneyEntry
    
    init(entry: MoneyEntry) {
        moneyEntry = entry
        let iOwe = entry.value < 0 ? true : false
        let value = abs(entry.value)
        
        
        entryData = EditEntryData(info: entry.infos, value: String(value), date: entry.date, iOwe: iOwe)
    }
}

struct EditEntryData {
    var info: String = ""
    var value: String = ""
    var date: Date = Date()
    var iOwe: Bool = false
}

【问题讨论】:

  • 什么是 EditEntryData?你能在这里添加吗
  • EditEntryData 是一个简单的结构。我将结构定义添加到问题中
  • 您不能在初始化程序中初始化@State 变量。状态是视图私有的,需要在声明中内联初始化,在初始化程序之外:@State var entryData = EditEntryData(...)。如果你不能这样做,那根本就不是“状态”。将此值放入重新设计的@ObservedObject 类中。

标签: ios swift swiftui


【解决方案1】:

你需要自己初始化状态,比如

    _entryData = State(initialValue: 
         EditEntryData(info: entry.infos, 
         value: String(value), date: entry.date, iOwe: iOwe))

【讨论】:

  • 视图就是函数!这将在视图初始化时创建一个新的状态变量,即需要渲染时。这将破坏@State 的目的,即管理通过多个生命周期保持活动状态的状态,即。调用渲染函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
相关资源
最近更新 更多