我已經建立了這段代碼
struct StarDifficultyView: View {
var numberOfStarsToShow: Int
var numberOfTotalStarsToShow: Int = 5
var body: some View {
HStack{
var numberLeftToShow = numberOfStarsToShow
ForEach(1..<numberOfTotalStarsToShow 1){_ in
if(numberLeftToShow > 0){
Image(systemName: "star.fill")
.foregroundColor(Color.yellow)
numberLeftToShow -= 1
}else{
Image(systemName: "star.fille")
.foregroundColor(Color.yellow)
}
}
}
}
}
它給了我一個錯誤,if(numberLeftToShow > 0){說“型別'()'不能符合'視圖'”
誰能告訴我我做錯了什么
uj5u.com熱心網友回復:
不要丟棄ForEach!的閉包引數
var body: some View {
HStack{
ForEach(0..<numberOfTotalStarsToShow){ i in // don't ignore the "i" here by writing "_"
// "i" will be different in each "iteration"
// use that to figure out which image to show
if(i < numberOfStarsToShow){
Image(systemName: "star.fill")
.foregroundColor(Color.yellow)
} else {
Image(systemName: "star")
.foregroundColor(Color.yellow)
}
}
}
}
uj5u.com熱心網友回復:
解釋問題:
您不應該在視圖構建器中添加運算式。所以numberLeftToShow -= 1會拋出錯誤,因為它回傳一個void('aka' type()) 并且這不符合View!這就是編譯器的確切原因!
注1
不要像 UIKit 那樣使用 SwiftUI!SwiftUI 視圖可能會隨著時間的推移在任何狀態更改時執行,不應用于以這種方式計算任何內容
筆記2
您可以轉換1..<numberOfTotalStarsToShow 1為封閉范圍,例如1...numberOfTotalStarsToShow(盡管對于這個問題您根本不需要它)
注3
盡量不要使用分支并將您的 if/else 代碼轉換為:
Image(systemName: numberLeftToShow > 0 ? "star.fill" : "star.fille")
.foregroundColor(Color.yellow)
注4:
范圍的下限不能小于范圍的上限,但您可以迭代反向范圍,例如:
(1...numberOfTotalStarsToShow).reversed()
注5:
嘗試使用像 forEach 引數本身這樣的單一事實來源!
注6:
Swift 可以推斷型別并且你不需要再次傳遞它:所以更改Color.yellow為.yellow
最后結果:
這是經過代碼審核的答案(基于您自己提供的答案):
var body: some View {
HStack {
ForEach(1...numberOfTotalStarsToShow, id:\.self) { i in
Image(systemName: "star.fill")
.foregroundColor(i > numberOfStarsToShow ? .gray : .yellow)
}
}
}
uj5u.com熱心網友回復:
沒關系,我就是這么做的
struct StarDifficultyView: View {
var numberOfStarsToShow: Int
var numberOfTotalStarsToShow: Int = 5
var body: some View {
HStack{
ForEach(1..<numberOfStarsToShow 1){_ in
Image(systemName: "star.fill")
.foregroundColor(Color.yellow)
}
ForEach(1..<numberOfTotalStarsToShow-numberOfStarsToShow 1){_ in
Image(systemName: "star.fill")
.foregroundColor(Color.gray)
.opacity(0.7)
}
}
}
}
基本上,它只是回圈顯示要顯示的黃色星星的數量,然后計算出要顯示的灰色星星的數量,并執行另一個 ForEach 來顯示所需的剩余星星
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/419489.html
標籤:
上一篇:單元格內的布局錯誤
