与此问题相关,但出现了其他错误:Other Question
我已尝试过Swift 3以及此问题的Swift 4代码:
我正在使用Swift 3.2,当使用Swift 3代码时,它因为没有使用SwapAt而对我大喊大叫,所以我已经包含了Swift 4代码,但我尝试了两种代码,结果相同。
使用shuffle()方法时,我收到错误Variable 'offerCardsShuffled' inferred to have type '()', which may be unexpected
,之后出现明显错误Value of tuple type '()' has no member 'enumerated'
我不确定会导致这种情况,因为使用此代码的其他人似乎没有这个问题。为什么我的洗牌阵列会变成空元组?
注意我对Swift开发相当新,所以彻底的解释肯定是有帮助的。
func displayOfferCards() -> Void {
//let offerCardsr = allOfferCards().reversed()
var offerCards = allOfferCards()
var offerCardsShuffled = offerCards.shuffle()
for (index, offerCard) in offerCardsShuffled.enumerated() {
let delay = Double(index) * 0.2
offerCard.display(delay: delay)
}
}
}
func allOfferCards() -> [OfferCard]{
guard dataSource != nil else {
return []
}
let numberOfCards = self.dataSource!.kolodaNumberOfCards(self)
var offerCards = [OfferCard]()
for i in 0..<numberOfCards {
let offerCard = viewForCard(at: i)
if let offerCard = offerCard {
offerCards.append(offerCard as! OfferCard)
}
}
return offerCards
}
extension MutableCollection {
/// Shuffles the contents of this collection.
mutating func shuffle() {
let c = count
guard c > 1 else { return }
for (firstUnshuffled, unshuffledCount) in zip(indices, stride(from: c, to: 1, by: -1)) {
let d: IndexDistance = numericCast(arc4random_uniform(numericCast(unshuffledCount)))
let i = index(firstUnshuffled, offsetBy: d)
swapAt(firstUnshuffled, i)
}
}
}
extension Sequence {
/// Returns an array with the contents of this sequence, shuffled.
func shuffled() -> [Element] {
var result = Array(self)
result.shuffle()
return result
}
}
答案 0 :(得分:0)
您的shuffle
方法会修改原始集合,但不会返回新集合。
变化:
var offerCardsShuffled = offerCards.shuffle()
为:
offerCards.shuffle()
并在剩余代码中将offerCardsShuffled
替换为offerCards
。