我在SwiftUI中创建了一个非常简单的测试:
口袋妖怪
struct Pokemon: Identifiable {
let id: Int
let name: String
}
PokemonList
struct PokemonList: View {
@State private var pokemonList: [Pokemon] = []
var body: some View {
List(pokemonList) {
PokemonRow(pokemon: $0)
}
.listStyle(PlainListStyle())
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
// Here I fill Pokemon list from API
}
}
}
init(_ pokemonList: [Pokemon] = []) {
self.pokemonList = pokemonList
}
}
#if DEBUG
struct PokemonList_Previews: PreviewProvider {
static var previews: some View {
PokemonList([
Pokemon(id: 1, name: "Bulbasaur"),
Pokemon(id: 25, name: "Pikachu"),
Pokemon(id: 150, name: "Mewtwo")
])
}
}
#endif
PokemonRow
struct PokemonRow: View {
var pokemon: Pokemon
var body: some View {
HStack(alignment: .center) {
Text("#(pokemon.id)")
Text(pokemon.name)
}
.padding()
.frame(height: 50)
}
}
#if DEBUG
struct PokemonRow_Previews: PreviewProvider {
static var previews: some View {
PokemonRow(pokemon: Pokemon(id: 25, name: "Pikachu"))
}
}
#endif
PokemonRow
预览工作得很好,API调用也是(视图出现后列表被正确填充),但由于某种原因,PokemonList
预览总是显示空内容。为什么呢?
谢谢你的帮助
init(_ pokemonList: [Pokemon] = []) {
self._pokemonList = State(initialValue: pokemonList) // << @State init
}