我使用组合方式通过api调用返回数据:
[Animals.Dog(id: nil, name: "Bobby", age: 4), Animals.Dog(id: nil, name: "Cronos", age: 2), Animals.Dog(id: nil, name: "Willy", age: 2), Animals.Dog(id: nil, name: "Rex", age: 8)]
finished
在用动物数组填充“列表”时,仅填充第一项。但是,该相同的第一项所显示的动物数量与它们一样多。在这种情况下,第一个项目被填充4次,而我的列表上看不到其他三只狗。
我的数据隐藏在哪里?
import SwiftUI
import Combine
struct AnimalsView: View {
@State private var dogs = [Dog]()
private let networkRequest = NetworkRequest()
//MARK: - Body
var body: some View {
VStack(spacing: 20) {
TitleView()
//MARK: Dogs list view
List(dogs) {
AnimalCell(name: $0.name,
age: $0.age)
}
.modifierViewList()
}
.onAppear {
_ = networkRequest.downloadAnimals()
.sink(receiveCompletion: {
print($0)
},receiveValue: { (animal) in
self.dogs = animal.dogs
print(animal.dogs)
})
}
}
}
//MARK: Network request
extension NetworkRequest {
func downloadAnimals() -> AnyPublisher<Animal, Error> {
URLSession.shared
.dataTaskPublisher(for: EndPoint.rates.url)
.receive(on: networkQueue)
.map(\.data)
.decode(type: Animal.self, decoder: JSONDecoder())
.mapError { (error) -> NetworkRequest.Error in
switch error {
case is URLError:
return Error.addressUnreachable(EndPoint.rates.url)
default:
return Error.invalidResponse
}
}
.eraseToAnyPublisher()
}
}
答案 0 :(得分:3)
如果Animal.Dog
符合Identifiable
,则所有数据都具有相同的id
,即nil
。因此,List
认为您只有一个不同的Animal.Dog
,第一个带有id
的{{1}}。尝试给他们实际的nil
。
答案 1 :(得分:0)
[Animals.Dog(id:1,name:“ Bobby”,age:4),Animals.Dog(id:2,name:“ Cronos”,age:2),Animals.Dog(id:3,名称:“ Willy”,年龄:2),Animals.Dog(id:4,名称:“ Rex”,年龄:8)]