【发布时间】:2018-01-16 22:25:35
【问题描述】:
与这个问题有关,但有不同的错误: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
}
}
【问题讨论】: