嘿,所以可以用一些更有經驗的眼睛來看看我遇到的這個問題。
我有兩組可玩的卡片和不可玩的卡片我需要將它們作為一個陣列在加載每個級別時傳遞到游戲中,但是添加卡片的位置很重要,所以我制作了一組位置我希望他們插入。
這是我的卡片模型和級別模型以及示例資料
struct Card {
var content: String
var id: Int
var isFaceUp = false
var isMatched = false
}
結構層{
let levelNumber: String
let numberOfNonCards: Int
let numberOfPlayableCards: Int
let locationsToPlacePlayableCards: [Int]
let winningScore: Int
}
靜態讓級別= [級別(級別編號:“一”,numberOfNonCards:20,numberOfPlayableCards:10,locationsToPlacePlayableCards:[3、4、6、7、9、12、20、21、22、23],winningScore:5)] }
下面是我試圖讓它發揮作用。
private static func createCardGame(level: Level) -> [Card] {
var cards = [Card]()
var playableCards = [Card]()
for indexPath in 0..<level.numberOfNonCards {
cards.append(Card(content: catCards[0], id: indexPath*3))
}
for indexPath in 0..<level.numberOfPlayableCards {
playableCards.append(Card(content: catCards[indexPath], id: indexPath*2))
playableCards.append(Card(content: catCards[indexPath], id: indexPath*2 5))
}
playableCards.shuffle()
var playingCardLocations = level.locationsToPlacePlayableCards
for indexPath in 0..<playingCardLocations.count {
cards.insert(contentsOf: playableCards[indexPath], at: playingCardLocations[indexPath])
}
return cards
}
這不起作用,因為我必須使 Card 符合 Collection,這似乎要求它符合 Sequence,然后是 IteratorProtocol。那么想知道實作這些協議的最佳方式是什么?因為找不到太多關于他們的資訊?或者根據您的經驗有沒有更好的方法來做到這一點?非常感謝您的幫助和意見。
uj5u.com熱心網友回復:
insert(contentsOf:at:)期望傳遞要插入的元素集合,但僅傳遞一張卡片。
還有另一種版本的插入,它采用單個元素。唯一的變化是洗掉contentsOf.
cards.insert(playableCards[indexPath], at: playingCardLocations[indexPath])
https://developer.apple.com/documentation/swift/array/3126951-insert
另一種選擇是在插入卡片之前將其放入陣列中,但是當有一個采用單個值的方法時,它是不必要的。
cards.insert(contentsOf: [playableCards[indexPath]], at: playingCardLocations[indexPath])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/436437.html
上一篇:快速訪問列舉引數
