首页 > 解决方案 > 'Album.Type' 不能转换为 '() -> Album'

问题描述

所以我将数据传递给另一个 SwiftUI 类Album()

struct ContentView: View {
  @ObservedObject var model = PostListViewModel()
  @ObservedObject var model2 = PostListViewByIdModel()

        var body: some View {

            NavigationView {
                List(model.posts) { post in
                 VStack{
                        Text("Title: ").bold()
                            + Text("\(post.title)")
                    NavigationLink(destination: Album(post: post, post2: self.model2.postsById)) {

我在线收到此错误Album(post: post, post2: self.model2.postsById)'Album.Type' is not convertible to '() -> Album'

这里是专辑

var mainArray:[PostById] = []
struct Album: View {
    var post:Post?
    var post2:[PostById] = []
    @ObservedObject var model = PostListViewModel()
    @ObservedObject var model2 = PostListViewByIdModel()

    init() {
        if let posty = post {
          mainArray = self.post2.filter { i in i.album_id == posty.id }
           print("mainArray \(mainArray)")
        }
    }

是因为init()功能吧?我该如何解决这个问题?

标签: swiftswiftui

解决方案


您需要定义Album.init(post: Post, post2: [PostById])是否要调用该初始化程序:

init(post: Post, post2: [PostById]) {
    self.post = post
    self.post2 = post2
    ... rest of your initialization
}

请注意,您在mainArray此处的使用表明存在严重的设计问题。视图是结构,系统可以随时创建或销毁。创建它们不应该产生副作用,例如修改全局变量。


根据您的描述,mainArray它只是 Album 的一个属性:

导入 SwiftUI

struct Album: View {
    var post:Post?
    var post2:[PostById] = []

    var mainArray:[PostById]

    @ObservedObject var model = PostListViewModel()
    @ObservedObject var model2 = PostListViewByIdModel()

    init(post: Post, post2: [PostById]) {
        self.post = post
        self.post2 = post2
        if let posty = post {
            mainArray = self.post2.filter { i in i.album_id == posty.id }
        } else {
            mainArray = []
        }
    }
}

推荐阅读