[英]Dictionary access inside a for loop in Swift
我正在尝试在Swift中进行一些PoC操作-我的第一个实验是一个简单的纸牌游戏。
我在尝试在for
循环中访问字典时遇到问题:
let suits: Array<String> = ["Spades", "Diamonds", "Clubs", "Hearts"]
let ranks: Array<Integer> = [1,2,3,4,5,6,7,8,9,10,11,12,13]
let rankMap: Dictionary<Int,String> = [1:"Ace", 11:"Jack", 12:"Queen", 13:"King"]
struct Card {
let suit: String
let rank: Integer
let image: String? //There's some NSObject that corresponds to image resources. Later.
}
func buildDeck(NumberOfJokers:Int) -> Array<Card>{
assert(NumberOfJokers <= 2, "Can't have more than two jokers in a deck")
var retDeck: Array<Card> = []
for s in suits {
for r in ranks {
let newSuit = rankMap[r]? //ERROR: Could not find an overload for subscript that accepts the supplied arguments
retDeck.append(Card(suit:s, rank:r, image: nil))
}
}
return retDeck
}
我不知道的是如何在遍历ranks
数组作为标识符时使用r
的当前值,以将适当的字符串从rankMap
字典中rankMap
。 我可以尝试使用r
整数作为字典键的任何方式抛出此“找不到重载”消息。
我知道我会从rankMap中获得Optional,但是展开/链接方法不会导致任何不同。
问题在于您的数组持有Integers
而您的字典使用Ints
作为键。 更改数组以容纳Ints
! 在文档的基本部分中对不同类型进行了一些解释。
// was using Integer so now use Int
let ranks: Array<Int> = [1,2,3,4,5,6,7,8,9,10,11,12,13]
// is keyed with Int
let rankMap: Dictionary<Int,String> = [1:"Ace", 11:"Jack", 12:"Queen", 13:"King"]
// hence your problem.
这是一个显示您的问题的简单示例:
var b: Integer = 3
var c: Int = 5
let bc = b + c // throws error!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.