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

Posted

技术标签:

【中文标题】变量“offerCardsShuffled”推断为“()”类型,这可能是意外的【英文标题】:Variable 'offerCardsShuffled' inferred to have type '()', which may be unexpected 【发布时间】:2018-01-16 22:25:35 【问题描述】:

与这个问题有关,但有不同的错误: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】:

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

变化:

var offerCardsShuffled = offerCards.shuffle()

到:

offerCards.shuffle()

并将剩余代码中offerCardsShuffled的使用替换为offerCards

【讨论】:

如何打印退回的收藏?

以上是关于变量“offerCardsShuffled”推断为“()”类型,这可能是意外的的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin函数 ⑤ ( 匿名函数变量类型推断 | 匿名函数参数类型自动推断 | 匿名函数又称为 Lambda 表达式 )

GroovyGroovy 动态语言特性 ( Groovy 中的变量自动类型推断以及动态调用 | Java 中必须为变量指定其类型 )

TypeScript:当提供变量 CLASS 作为函数参数时,将返回类型推断为该类的实例(仅来自参数)

编译器对超出范围的变量的右值引用进行推断

TypeScript类型检查机制

JDK10的局部类型局部变量类型推断功能