2014-10-10 37 views
0

编译我有最新的XCode 6.1(6A1046a)一些编译问题NSURLCredential不能在斯威夫特

此行将编译:

var newCredential = NSURLCredential(user: "test", password: "test", persistence: NSURLCredentialPersistence.None); 

但“呼叫额外的参数‘身份’”这一项抛出错误:

var identita : SecIdentity = self.getClientCertificate(); 
var newCredential2 = NSURLCredential(identity: identita, certificates: nil, persistence: NSURLCredentialPersistence.None); 

但我不知道为什么。根据手册它应该工作:https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSURLCredential_Class/index.html#//apple_ref/occ/clm/NSURLCredential/credentialWithIdentity:certificates:persistence

任何想法?

回答

2

错误Swift给你的误导(如果你传递给函数的参数之一是错误的类型,这是一个常见的问题)。问题是certificates被定义为[AnyObject],但是你通过它nil。由于certificates不是可选的,因此不能采用nil的值。该文档还表示:

表示用于凭证 证书一个或多个 SecCertificateRef对象的数组。

所以,你应该传递一个至少有一个证书的数组。

1

编译器诊断在这里很糟糕。实际发生的事情是,您通过nil获得certificates参数,但该参数采用非可选[AnyObject],编译器找不到与该类型匹配的初始值设定项。尝试传递[](空数组)。