下面的代码有效地显示了狗的名字,当选择一只狗时,它输出了它的颜色。我想做的是能够跟踪选择了什么对象,并能够在onChange
方法中访问它的所有属性。
如何在onChange
方法中访问所选对象的所有属性?
class Dog:NSObject {
var name = ""
var color = ""
var breed = ""
init(name: String, color: String, breed: String) {
self.name = name
self.color = color
self.breed = breed
}
}
class DogService:ObservableObject{
@Published var dogs:[Dog]
init(){
dogs = [Dog(name:"Pluto", color: "Brown", breed: "Golden Retriever"),
Dog(name: "Teddy", color: "White", breed: "Poodle"),
Dog(name: "Rocky", color: "Black", breed: "Labrador")]
}
}
struct PickerTest: View {
let dogService = DogService()
@State private var selectedDog = ""
var body: some View {
Form {
Picker("Dogs:", selection: $selectedDog) {
ForEach(dogService.dogs, id: \.self) {
Text($0.name).tag($0.color)
}
}
.onChange(of: selectedDog) {dog in
print("Dog Color: \(dog)") // outputs, Brown, White or Black
// what I would like to do...
// print("Dog Breed: \(dog.breed)") // should output, Golden Retriever, Poodle or Labrador
}
}
}
}
1条答案
按热度按时间ruarlubt1#
您可以使用
Dog
来代替String
另外需要考虑的是,为了让SwiftUI知道一个对象的变量何时发生了变化,
class
必须是一个ObservableObject
,带有适当的@Published
变量,或者是一个struct
。您的class Dog:NSObject
,应根据您的要求进行更改。