2014-10-10 76 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],編譯器找不到與該類型匹配的初始值設定項。嘗試傳遞[](空數組)。