簡體   English   中英

使用 if 語句時:類型 '()' 不能符合 'View'; 只有結構/枚舉/類類型可以符合協議

[英]While using an if statement: Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols

我正在嘗試實現一個按鈕,該按鈕通過列表中的每個項目激活 ForEach 循環到 go 並將其標記為延遲。 這是我的代碼:

import SwiftUI

struct AllJobsDelayWeather: View{
    var jobIndividualViewModel: JobIndividualViewModel
    @State public var comparisonDate = getCurrentDate()
    
    
    var body: some View{
        let jobDate = ParserDate(date: jobIndividualViewModel.job.date)
        Text(" ")
        if jobIndividualViewModel.job.completed == false && jobDate == comparisonDate{ //error is here
            jobIndividualViewModel.delayWeather(jobIndividualViewModel.job) 
               Text(" ")
            }
        Text(" ")
        
        }
}

這是程序的“主要”(如果你可以調用它)部分

Button("Delay Bad Weather"){
                    ForEach(jobViewModel.jobIndividualViewModels) { jobVM in
                        AllJobsDelayWeather(jobIndividualViewModel: jobVM)
                    }
                }.padding()

我收到此錯誤:類型“()”不能符合“視圖”; 只有結構/枚舉/類類型可以符合協議。 function 工作正常並且已經過“臨時”測試。 我不知道如何擺脫編譯器拋出的錯誤。

編輯目前正在嘗試這樣做:

//in body
Button("Delay Bad Weather"){
                    ForEach(jobViewModel.jobIndividualViewModels) { jobVM 
//errors getting thrown above
                        AllJobDelayWeather(jobVM: jobVM)
                    }
                }.padding()

//outside if struct in the same file

func AllJobDelayWeather(jobVM: JobIndividualViewModel){
    let comparisonDate = getCurrentDate()
    
    let jobDate = ParserDate(date: jobVM.job.date)
    if jobVM.job.completed == false && jobDate == comparisonDate{
        jobVM.delayWeather(jobVM.job)

        }
    
}

我現在收到 2 個錯誤實例,一個在 ForEach 的 F 上,一個在 jobVM 的第一個實例之前的 {。

正如評論中提到的,您正在使用ForEach ,這是一個 SwiftUI 視圖,位於 Button 的action閉包內,您無法在其中查看。 查看更新后的代碼,您似乎只需要一個常規的 forEach。 就像是:

Button("Delay Bad Weather") {
   jobViewModel.jobIndividualViewModels.forEach { jobVM
     allJobDelayWeather(jobVM: jobVM)
   }
}.padding()
func allJobDelayWeather(jobVM: JobIndividualViewModel){
    let comparisonDate = getCurrentDate()
    
    let jobDate = ParserDate(date: jobVM.job.date)
    if jobVM.job.completed == false && jobDate == comparisonDate{
        jobVM.delayWeather(jobVM.job)
    }
}

我將您的 function 名稱更改為小寫,因為這是 Swift 中的首選命名約定。 就像您在評論中暗示的那樣,讓 function 漂浮在視圖之外也有些不尋常——它可能屬於視圖內部或視圖 model 內部(很難說,因為我看不到您的所有代碼)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM