arrays - 不能在不可变值 : function call returns immutable value - not sure why value is immutable 上使用可变成员

标签 arrays swift

Swift 开发相对较新。尝试修改其他人编写的几个函数。目标是在用户登录后第一次调用此路径(该部分尚未设置)时离开原始路径,并在后续调用中使用其他路径。

因此,在编写将指向首次通过或非首次通过的逻辑之前,我正在测试非首次通过逻辑。

这是 allOfferCards():

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
}

这里是我尝试进行更改的地方。原始逻辑反转从 allOfferCards() 返回。我想使用一个名为“shuffle”的自定义函数来随机化数组。

func displayOfferCards() -> Void {
    // What was here originally
    //let offerCards = allOfferCards().reversed()
    var offerCards = allOfferCards().shuffle()

    for (index, offerCard) in offerCards.enumerated() {
        let delay = Double(index) * 0.2
        offerCard.display(delay: delay)
    }
}

这是随机播放功能

extension Array
{
    /** Randomizes the order of an array's elements. */
    mutating func shuffle()
    {
        for _ in 0..<10
        {
            sort { (_,_) in arc4random() < arc4random() }
        }
    }
}

然而,当我尝试运行它时,我在标题中得到了错误——不能在不可变值上使用可变成员。但是我不确定为什么 allOfferCards() 生成不可变值 - var offerCards 是使用 var 关键字定义的,而不是 let 关键字 - 这应该意味着它是可变的吗?

我在这里做错了什么?

最佳答案

问题在于,在为函数的返回值赋值之前,值本身是不可变的,因此不能直接对其调用可变函数。您应该首先将返回值分配给可变变量,然后对其调用变异函数。

func displayOfferCards() -> Void {
    var offerCards = allOfferCards()
    offerCards.shuffle()

    for (index, offerCard) in offerCards.enumerated() {
        let delay = Double(index) * 0.2
        offerCard.display(delay: delay)
    }
}

关于arrays - 不能在不可变值 : function call returns immutable value - not sure why value is immutable 上使用可变成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48287795/

相关文章:

php - 何时适合使用 ArrayObject 而不是 Array

c - 在函数C中分配内存二维数组

SwiftUI:强制更新

iOS 区域监控,设备重启后位置不会发生重大变化

ios - 无法执行 segue 退出

swift - 如何在 UIButton 背景中设置两种颜色

ios - 如何使用 Swift 将通知数据传递给 View Controller

javascript - typescript 限制最大数组长度

java - 如何将数组中的元素复制到子数组中

php - 如果模式不匹配,如何使 preg_match_all 返回空数组值?