SwiftUI 未知属性“可观察对象”

Mik*_*lls 6 swiftui

所以我在下面ObservableObject的@ObservableObject var dataSource = DataSource()调用旁边收到错误 Unknown 属性。在ObservableObject完美地工作,几天前在另一个项目,但现在不是了。

import SwiftUI
import Combine


class DataSource: ObservableObject {

    var willChange = PassthroughSubject<Void,Never>()


    var expenses = [Expense]() {
        willSet { willChange.send() }
    }
    var savingsItems = [SavingsItem](){
        willSet { willChange.send() }
    }

    //@State var monthlyIncomeText: String
    //var monthlyIncome: Int = 1364


    init(){
        addNewExpense(withName: "Spotify", price: 14)

    }

    func addNewExpense(withName name: String, price: Int){
        let newExpense = Expense(name: name, price: price)
        expenses.append(newExpense)
    }

     func addNewSavingsItem(withName name: String, price: Int, percentage: Double){
        let newSavingsItem = SavingsItem(name: name, price: price, timeTilCompletion: 0, percentage: percentage)
        savingsItems.append(newSavingsItem)
    }
}

struct ContentView: View {

    @ObservableObject var dataSource = DataSource()

    var body: some View {
        VStack{
            Text("Expenses")
            List(dataSource.expenses) { expense in
                ExpenseRow(expense: expense)
            }
        } 
    } 
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

RPa*_*l99 9

ObservableObject是ObservedObjects 必须遵守的协议。请参阅此处获取有关 的文档ObservableObject,此处获取有关 的文档ObservedObject,这是您正在寻找的属性包装器。将您的ContentView代码更改为:

struct ContentView: View {

    @ObservedObject var dataSource = DataSource()

    var body: some View {
        VStack {
            Text("Expenses")
            List(dataSource.expenses) { expense in
                ExpenseRow(expense: expense)
            }
        } 
    } 
}
Run Code Online (Sandbox Code Playgroud)

  • 以防万一有人遇到这个...不要这样做。每次评估视图定义时都会创建一个新的 DataSource() 实例。请改用 SwiftUI 2 中引入的 @StateObject。 (3认同)