使用数组中的数据将数组元素插入 Swift 中的另一个数组
Using data in an array to insert elements of an array into another in Swift
嘿,所以可以让一些更有经验的人来看待我遇到的这个问题。
我有两组可玩卡牌和不可玩卡牌我需要将它们作为一个数组在游戏加载每个级别时传递到游戏中但是添加卡牌的位置很重要所以我做了我要插入的位置数组。
这是我的 Card 模型和 Level 模型以及示例数据
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
}
静态让水平= [
级别(levelNumber:“一个”,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。所以想知道实施这些协议的最佳方式是什么?因为找不到太多关于他们的信息?或者根据您的经验,是否有更好的方法来做到这一点?非常感谢您的帮助和意见。
insert(contentsOf:at:)
希望传递一组要插入的元素,但它只传递了一张卡片。
还有另一个版本的 insert 接受单个元素。唯一的变化是删除 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])
嘿,所以可以让一些更有经验的人来看待我遇到的这个问题。
我有两组可玩卡牌和不可玩卡牌我需要将它们作为一个数组在游戏加载每个级别时传递到游戏中但是添加卡牌的位置很重要所以我做了我要插入的位置数组。
这是我的 Card 模型和 Level 模型以及示例数据
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
}
静态让水平= [ 级别(levelNumber:“一个”,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。所以想知道实施这些协议的最佳方式是什么?因为找不到太多关于他们的信息?或者根据您的经验,是否有更好的方法来做到这一点?非常感谢您的帮助和意见。
insert(contentsOf:at:)
希望传递一组要插入的元素,但它只传递了一张卡片。
还有另一个版本的 insert 接受单个元素。唯一的变化是删除 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])