swift - '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()
功能吧?我该如何解决这个问题?
解决方案
您需要定义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 = []
}
}
}
推荐阅读
- javascript - 用户名和密码的 Javascript 登录页面数组不起作用
- python - 在 TimeDistributed CNN 模型的第一个纪元开始时,Google Colab 中的会话崩溃
- datatables - Datatables 1.10 启用不带记录的分页
- reactjs - 带有 forwardRef 的子组件
- postgresql - PostgreSQL 中的列表类型是什么?
- java - 保存新关系时关系变得疏离
- spring - SpringBoot:无法与maven创建战争:无法找到主类
- node.js - Nodejs Cloud Vision 文档文本检测永远不会返回
- matlab - 如何在 Octave/Matlab 中解决这个矩阵等式?
- git - git rebase 不先做 stash