Swift 5 — аргумент, переданный вызову, который не принимает аргументов

#swift #swiftui

#swift #swiftui

Вопрос:

Я пытаюсь передать данные в новое представление в моем приложении, чтобы мой скрипт мог подключить данные к ссылке и получить соответствующую информацию о статье. Мое представление вызывается с ArticleView(articleID: 0) помощью, хотя это изменяется с идентификатором статьи. Начало моего представления начинается как таковое…

 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=fetchArticleamp;articleID=(self.articleID)")
   }
  

Я пытаюсь понять, как мне сохранить идентификатор статьи из моей панели мониторинга в var articleId, чтобы моя функция loadArticle могла затем запустить скрипт и извлечь содержимое? Я могу предоставить информацию для Result2() вместе со структурами данных для Response2 и Story по запросу. Спасибо!

Комментарии:

1. Это должно быть init(articleID: Int) {... ,

2. Спасибо, это действительно помогло.

Ответ №1:

У вас есть 2 варианта:

  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. Спасибо, в итоге я использовал вариант 1, но я буду иметь в виду второй вариант! Спасибо!