【问题标题】:Swift 5 - Argument passed to call that takes no argumentsSwift 5 - 传递给不带参数的调用的参数
【发布时间】:2021-01-05 17:45:57
【问题描述】:

我正在尝试将数据传递到我的应用程序中的新视图,以便我的脚本可以将数据插入链接并获取相应的文章信息。我的视图是用ArticleView(articleID: 0) 调用的,尽管这会随着文章的ID 而变化。我的观点的开始就是这样......

struct ArticleView: View {
   var articleID: Int
   @Envionment(.\imageCache) var cache: ImageCache
   @ObservedObject private var data = Result2()
   let defaults = UserDefaults.standard

   ...

   init() {
      self.data.results.append(Story.init(id: 0, title: "test", image: "", story: "", published: "", author: ""))
      self.loadArticle(CDNLink: "http://\(self.defaults.object(forKey: "domain") as! String)/cdn?funct=fetchArticle&articleID=\(self.articleID)")
   }

我想了解的是如何从仪表板获取文章 ID 以存储在 var articleID 中,以便我的 loadArticle 函数可以运行脚本并将内容拉入?我可以根据要求提供 Result2() 的信息以及 Response2 和 Story 的数据结构。谢谢!

【问题讨论】:

  • 应该是init(articleID: Int) {...,
  • 谢谢,这真的很有帮助。

标签: swift swiftui


【解决方案1】:

你有两个选择:

  1. 向初始化器请求参数:
struct ArticleView: View {
    var articleID: Int
    ...

    init(articleID: Int) {
        self.articleID = articleID

        // Do whatever you need
    }

    var body: some View {
        SomeView()
    }
}
  1. 省略初始化程序并将所需的所有内容放在.onAppear 子句中
struct ArticleView: View {
    var articleID: Int
    ...

    var body: some View {
        SomeView()
            .onApppear {
                // Do whatever you need
            }
    }
}

在第二种情况下,编译器将使用所需的所有值自动创建一个初始化程序(在您的情况下 - articleID)

【讨论】:

  • 谢谢,我最终使用了选项 1,但我会牢记选项 2!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多