繁体   English   中英

Swift中for循环内的字典访问

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM