gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 15:07:00 29 4
gpt4 key购买 nike

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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com