Reputation: 195
So I'm getting the error Unknown attribute ObservableObject
next to the @ObservableObject var dataSource = DataSource()
call below. the ObservableObject
worked perfectly a couple days ago in another project but not anymore.
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)
}
}
}
}
Could anyone help?
Upvotes: 10
Views: 18493
Reputation: 8106
ObservableObject
is a protocol that ObservedObject
s must conform to. See here for documentation on ObservableObject
, and here for documentation on ObservedObject
, which is the property wrapper that you are looking for. Change your ContentView
code to this:
struct ContentView: View {
@ObservedObject var dataSource = DataSource()
var body: some View {
VStack {
Text("Expenses")
List(dataSource.expenses) { expense in
ExpenseRow(expense: expense)
}
}
}
}
Upvotes: 16