Swift 快速字典

Swift 快速字典,swift,dictionary,Swift,Dictionary,我正在尝试这样做: var myBeacons: [NSUUID: [Int]] = [NSUUID(UUIDString:"74278BDA-B644-4520-8F0C-720EAF059935"): [1,1]] 但我得到了以下错误: '[NSUUID: [Int]]' is not convertible to '[NSUUID: [Int]]' 如果我这样做: var myBeacons2: [String: [Int]] = ["74278BDA-B644-4520-8F0C-7

我正在尝试这样做:

var myBeacons: [NSUUID: [Int]] = [NSUUID(UUIDString:"74278BDA-B644-4520-8F0C-720EAF059935"): [1,1]]
但我得到了以下错误:

'[NSUUID: [Int]]' is not convertible to '[NSUUID: [Int]]'
如果我这样做:

var myBeacons2: [String: [Int]] = ["74278BDA-B644-4520-8F0C-720EAF059935": [1,1]]
它起作用了

我是错过了什么还是看起来像虫子?正如Martin指出的那样,我使用的是Xcode 7 beta,nsuiduuidstring:返回一个可选的。您需要打开它:

var myBeacons:=[ NSUIDUUIDSTRING:74278BDA-B644-4520-8F0C-720EAF059935!:[1,1]]

注意在调用NSUID初始值设定项后的感叹号

我在Xcode 6.3.2下测试了它,它可以正常工作。我还没有在Xcode 7下测试过它

编辑: 事实上,最好使用@MatteoPiombo的答案中概述的可选绑定。你应该接受他的答案,因为它为你提供了最可靠的解决方案。我投票赞成他的答案。这是到目前为止最好的答案

便利初始化?UUIDString string:string返回一个可选字符串,请按如下方式尝试展开它:

let givenString = "74278BDA-B644-4520-8F0C-720EAF059935"
var myBeacons: [NSUUID: [Int]] = [:]
if let uuid = NSUUID(UUIDString: givenString) {
    // Here we are sure that the uuid is valid 
    myBeacons[uuid] = [1, 1]
}
var myBeacons:[nsuid:[Int]=[nsuiduuidstring:74278BDA-B644-4520-8F0C-720EAF059935!:[1,1]

由于不是每个字符串都是有效的UUID,初始化器可能会失败。因此,初始化器返回一个可选的。这是为了鼓励代码安全。 根据需要,您可以检查是否为UUID提供了有效字符串,如下所示:

let givenString = "74278BDA-B644-4520-8F0C-720EAF059935"
var myBeacons: [NSUUID: [Int]] = [:]
if let uuid = NSUUID(UUIDString: givenString) {
    // Here we are sure that the uuid is valid 
    myBeacons[uuid] = [1, 1]
}

如果删除[NSUID:[Int]]并让swift推断类型会发生什么情况?与许多swift问题中的原因相同:NSUIDUUIDSTRING:返回一个可选的…如果您不理解复杂语句中的错误消息,请将其拆分为更简单的错误消息。让uuid:NSUID=NSUIDUUIDString:74278BDA-B644-4520-8F0C-720EAF059935告诉您:错误:可选类型“NSUID”的值未展开;你想用“!”吗或者“?”?你和我给出了相同的答案,但Matteo的答案更好。在这个问题中,对于UUID字符串中编译的固定值,实际上我更喜欢强制展开。无效的UUID将是一个编程错误,应该尽快检测到,而不是隐藏。