Ios 在Swift中使用NSINIT时遇到问题

Ios 在Swift中使用NSINIT时遇到问题,ios,xcode,swift,ios8,nsdictionary,Ios,Xcode,Swift,Ios8,Nsdictionary,我似乎在尝试使用一个方便的初始化器在Swift中创建NSDictionary时遇到了问题。我的困惑在于,错误表明我的函数签名是错误的,但我使用的是XCode为我自动完成的函数签名 我的代码: var query = NSDictionary(objects: [kSecClass, kSecAttrService, kSecAttrAccount, kSecReturnData], forKeys: [kSecClassGenericPassword, "healthBIT.lastSync",

我似乎在尝试使用一个方便的初始化器在Swift中创建NSDictionary时遇到了问题。我的困惑在于,错误表明我的函数签名是错误的,但我使用的是XCode为我自动完成的函数签名

我的代码:

var query = NSDictionary(objects: [kSecClass, kSecAttrService, kSecAttrAccount, kSecReturnData], forKeys: [kSecClassGenericPassword, "healthBIT.lastSync", key, true])
XCode提供的签名:

var query = NSDictionary(objects: <#[AnyObject]#>, forKeys: <#[AnyObject]#>)
var query=NSDictionary(对象:,分叉:)
编译时的错误是:调用中的额外参数“forKeys”

我错过了什么?我是不是因为睡眠不足而看不到显而易见的东西?或者这仅仅是一个愚蠢的错误,源于我对斯威夫特的相对缺乏经验


PS:我试图在这里使用NSDictionary而不是普通的Swift dict,因为Swift dict不能存储混合类型,我需要将其传递给底层的基于C的Keychain API。

在chat中进行讨论后,发现问题出在问题中提供的代码示例中引用的
key
变量上,它来自
for
循环:

for key in lastSync {
    ...
}
错误在于
key
是一个
(key,value)
元组,在
NSDictionary
中使用它会导致问题(objc类型无法处理swift特定的特性,例如泛型、元组等)

通过相应地展开元组来解决此问题:

for (key, value) in lastSync {
    ...
}
或者,如果未使用

for (key, _) in lastSync {
    ...
}

好的,像往常一样,在发布了一个问题之后,我开始明白了。我不完全介意你,但我看到了一个问题。显然,Swift中的数组受到与DICT相同的限制,不能存储混合类型。上面代码中给出的XCode错误具有误导性,实际问题似乎是我的keys数组具有混合类型。Grr哪种愚蠢的现代语言不允许混合类型:(我在操场上测试了你的代码,它可以工作……所以我想知道问题是什么。此外,你可以将swift字典声明为[String:AnyObject],虽然我不知道它是否能与基于C的APIOk一起工作忽略这一点-我现在意识到您正在使用不同类型的密钥。这可能是不可能的,因为密钥类型必须实现
Hashable
协议,但是
AnyObject
对AnyObject的事情没有兴趣。Swift文档有点误导阅读之后,虽然我猜他们在技术上并没有错误,因为AnyObject是一种具体类型。我会尝试一下,尽管我可能会遇到铸造问题。奇怪的是,它在操场上对你有效,但它对我肯定不起作用,当我尝试分解它时,XCode会在键的混合值上给我一个错误(我在我的代码中实际上是反向的,其中键和值是反向的lol)啊,好的-一开始我以为你用键交换了值,然后在阅读了你的评论后,我认为这是故意的(尽管使用布尔值作为键听起来很不寻常:)).相反,我最初的推断是正确的。至于施法,是的,我认为你会(实际上比施法更容易转换),因为如果看起来你又在使用C StringsHanks Antonio!误导性的XCode错误导致胜利:)