我在 Playground 中有這個非常簡單的代碼。它編譯時沒有錯誤,但是當我嘗試運行它時,出現remove(atOffsets:)函式錯誤。這是為什么?
enum CandyColor: CaseIterable {
case red, green, yellow, brown
}
enum CandyFilling: CaseIterable {
case chocolade, nuts
}
extension CaseIterable {
static var random: Self {
Self.allCases.randomElement()!
}
}
typealias Candy = (color: CandyColor, filling: CandyFilling)
var candies = (0...20).map{ _ in Candy(color: CandyColor.random, filling: CandyFilling.random)}
var redWithChocolade = [Candy]()
var yellowWithNuts = [Candy]()
var brownAndGreenWithChocolade = [Candy]()
var indiciesToRemove = IndexSet()
for (index, candy) in candies.enumerated() {
switch candy {
case (.red, .chocolade):
redWithChocolade.append(candy)
indiciesToRemove.insert(index)
case (.yellow, .nuts):
yellowWithNuts.append(candy)
indiciesToRemove.insert(index)
case let(c) where [.brown, .green].contains(c.color) && c.filling == .chocolade:
brownAndGreenWithChocolade.append(c)
indiciesToRemove.insert(index)
default:
break
}
}
candies.remove(atOffsets: indiciesToRemove) // Error: candidate expects value of type 'Int' for parameter #1
print("Left in heap: \(candies)")
uj5u.com熱心網友回復:
你為什么不使用 justfilter(_:)呢?
let leftOver = candies.filter { candy in
switch candy {
case (.red, .chocolade):
redWithChocolade.append(candy)
return false
case (.yellow, .nuts):
yellowWithNuts.append(candy)
return false
case (.brown, .chocolade):
fallthrough
case (.green, .chocolade):
brownORGreenWithChocolade.append(candy)
return false
default: return true
}
}
或者,如果您確實需要就地移除,請removeAll(where:):
candies.removeAll { candy in
switch candy {
case (.red, .chocolade):
redWithChocolade.append(candy)
return true
case (.yellow, .nuts):
yellowWithNuts.append(candy)
return true
case (.brown, .chocolade):
fallthrough
case (.green, .chocolade):
brownORGreenWithChocolade.append(candy)
return true
default: return false
}
}
uj5u.com熱心網友回復:
你應該添加:
import SwiftUI
到您的腳本,因為它包含remove(atOffsets:)實作,而 XCode 不會隱式匯入此框架。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/354269.html
下一篇:陣列中的值得到改變但他們不應該
