Gui*_*man 16 arrays sorting swift
我已声明一个数组使用var并填充它init().然而,当我尝试改变那个数组时,我得到了大量错误,告诉我数组是不可变的.我在这里错过了什么?
struct Deck {
var cards: Card[] = []
init () {
for i in 1...4 {
for ii in 1...13 {
self.cards.append(Card(rank: Rank.fromRaw(ii)!, suit: Suit.fromRaw(i)!))
}
}
}
func shuffle () {
var shuffledDeck: Card[] = []
var count = self.cards.count
for i in 1...52 {
var limit = count - i
var key = Int(arc4random_uniform(UInt32(limit)));
shuffledDeck.append(self.cards[key])
self.cards.removeAtIndex(key)
}
self.cards = shuffledDeck
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
Playground execution failed: error:
<REPL>:75:22: error: immutable value of type 'Card[]' only has mutating members named 'removeAtIndex'
self.cards.removeAtIndex(key)
^ ~~~~~~~~~~~~~
<REPL>:78:24: error: cannot assign to 'cards' in 'self'
self.cards = shuffledDeck
Run Code Online (Sandbox Code Playgroud)
zou*_*oul 27
A struct被认为是值类型,因此默认情况下它是不可变的.如果要使用方法更改它,则必须声明方法mutating.引用Swift书:
结构和枚举是值类型.默认情况下,无法在其实例方法中修改值类型的属性.
但是,如果需要在特定方法中修改结构或枚举的属性,则可以选择改变该方法的行为.然后,该方法可以从方法中改变(即更改)其属性,并且当方法结束时,它所做的任何更改都将写回原始结构.该方法还可以为其隐式self属性分配一个全新的实例,并且该新实例将在方法结束时替换现有实例.
您可以通过将
mutating关键字放在该方法的关键字之前来选择此行为func.
| 归档时间: |
|
| 查看次数: |
11546 次 |
| 最近记录: |