变量'offerCardsShuffled'推断为类型'()',这可能是意外的

时间:2018-01-16 22:25:35

标签: arrays swift

与此问题相关,但出现了其他错误:Other Question

我已尝试过Swift 3以及此问题的Swift 4代码:

Shuffle Link

我正在使用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
    }
}

1 个答案:

答案 0 :(得分:0)

您的shuffle方法会修改原始集合,但不会返回新集合。

变化:

var offerCardsShuffled = offerCards.shuffle()

为:

offerCards.shuffle()

并在剩余代码中将offerCardsShuffled替换为offerCards