不同的有效代码示例会抛出相同的错

时间:2016-08-30 19:33:32

标签: ios swift xcode ssl

我尝试使用TCP SSL连接openssl s_server和iOS客户端(另外,我得到another issue with this,也许这与此相关)。现在我尝试使用此sample code from github

let mainbun = NSBundle.mainBundle().pathForResource("pd-test", ofType: "cer")
var key: NSData = NSData.dataWithContentsOfMappedFile(mainbun!)! as NSData
var cert:SecCertificateRef =
SecCertificateCreateWithData(kCFAllocatorDefault, key).takeRetainedValue()

var err:OSStatus = noErr

let secDict = NSDictionary(
    objects: [kSecClassCertificate,cert],
    forKeys: [kSecClass, kSecValueRef]
)


SecItemAdd(secDict as CFDictionaryRef, nil);

但是得到错误:

ViewController.swift:67:74: 'AnyObject' is not convertible to 'NSData'; did you mean to use 'as!' to force downcast? 

ViewController.swift:69:9: Value of type 'SecCertificate?' has no member 'takeRetainedValue' 

ViewController.swift:75:23: Value of type 'CFString' does not conform to expected element type 'NSCopying'

为什么我无法构建有效的代码(我看到很多像这样的样本,它们几乎都会抛出相同的错误,例如this)?我该如何解决?

1 个答案:

答案 0 :(得分:0)

  

为什么我无法构建有效的代码

这是因为Swift语言在不断发展;您使用的是Swift的新版本,而不是编写时使用的示例。它当时是有效的Swift,但它对你的版本的Swift无效。

(如果您要下载Xcode 8种子6,第一行甚至不会编译;现在没有NSBundle这样的东西,没有mainBundle()这样的东西{1}},而不是pathForResource。这表明Swift语言可以根本改变。)