我正在构建一个 SwiftUI 应用程序,它可以从Movie Database API中按类型检索一系列电影。
用户选择电影后,我会创建第二个 API 来获取该特定电影的详细信息。我正在使用 @Published 通知视图更改,但是每当我调用模型的实例时,我都会收到错误“调用中的参数‘from’缺少参数”。
这是模型:
import Foundation
// MARK: - MovieList
struct MovieList: Codable {
let page: Int
let totalResults: Int
let totalPages: Int
let movie: [Movie]
enum CodingKeys: String, CodingKey {
case page
case totalResults = "total_results"
case totalPages = "total_pages"
case movie = "results"
}
}
// MARK: - Movie
struct Movie: Codable {
let popularity: Double
let voteCount: Int
let video: Bool
let posterPath: String?
let id: Int
let adult: …
Run Code Online (Sandbox Code Playgroud) 我有一个包含选择器的 SwiftUI 视图。我在 Picker 的 .onReceive 中使用 Switch 语句来调用函数。该函数调用外部 API。
问题是每当视图初始化时,该函数就会被调用两次,即复制数据。我不明白为什么 .onReceive 被调用两次。
我认为这可能与我初始化选取器模型时调用的函数有关,然后从选取器本身收到另一个通知,但我不确定如何解决它。
这是我的代码:
拣货机型号
import Foundation
class PickerModel: ObservableObject {
@Published var filter = 0
let pickerOptions = ["Popular", "Top Rated"]
}
Run Code Online (Sandbox Code Playgroud)
包含选择器的视图:
import SwiftUI
struct FilteredMoviesGridView: View {
@ObservedObject private var filteredMovieVM = FilteredMovieGridViewModel()
@ObservedObject private var pickerModel = PickerModel()
private var twoColumnGrid = [GridItem(.flexible()), GridItem(.flexible())]
var body: some View {
NavigationView {
VStack {
Picker(selection: $pickerModel.filter, label: Text("Select")) {
ForEach(0 ..< pickerModel.pickerOptions.count) {
Text(pickerModel.pickerOptions[$0])
}
}.onReceive(pickerModel.$filter) …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 NavigationLink 的 isActive 变量弹出回根视图控制器。
我遇到的问题是,单击列表项时使用 isActive 会推送错误的行。删除 isActive 变量,一切都会按预期工作。
以下是一些用于演示目的的示例代码:
struct ContentView: View {
@State private var activateNavigationLink: Bool = false
var exampleData = ["a", "b", "c"]
var body: some View {
NavigationView {
List(exampleData, id: \.self) { item in
NavigationLink(
destination: SecondView(item: item), isActive: $activateNavigationLink) {
Text(item)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
第二视角
struct SecondView: View {
var item: String
var body: some View {
Text(item)
}
}
Run Code Online (Sandbox Code Playgroud)
这让我抓狂。任何帮助将不胜感激。