为什么我的SwiftUI列表没有填充我的所有数据?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我的SwiftUI列表没有填充我的所有数据?相关的知识,希望对你有一定的参考价值。
我使用组合方式通过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()
答案
如果Animal.Dog
符合Identifiable
,则所有数据都具有相同的id
,即nil
。因此,List
认为您只有一个不同的Animal.Dog
,第一个带有id
的nil
。尝试给他们实际的id
。
以上是关于为什么我的SwiftUI列表没有填充我的所有数据?的主要内容,如果未能解决你的问题,请参考以下文章