'Album.Type' не конвертируется в '() -> Album' - PullRequest
0 голосов
/ 24 марта 2020

Итак, я передаю данные в другой класс 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() верно? Как мне исправить эту проблему?

1 Ответ

0 голосов
/ 24 марта 2020

Вам нужно определить Album.init(post: Post, post2: [PostById]), если вы хотите вызвать этот инициализатор:

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

Обратите внимание, что использование здесь mainArray указывает на серьезную проблему проектирования. Представления являются структурами и могут быть созданы или уничтожены системой в любое время. Их создание никогда не должно создавать побочных эффектов, таких как изменение глобальной переменной.


Из вашего описания mainArray является просто свойством альбома:

import 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 = []
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...