无法使用类型'(Unmanaged <cfhttpmessage>!)'的参数列表调用'CFHTTPMessageCopySerializedMessage'

时间:2015-07-11 10:10:01

标签: ios swift cfnetwork

我跟着Apple的文档,但在Swift中,我遇到了这个错误。

let url = "http://www.apple.com"
let myURL = CFURLCreateWithString(kCFAllocatorDefault, url, nil);

let myRequest = CFHTTPMessageCreateRequest(kCFAllocatorDefault, "GET", myURL, kCFHTTPVersion1_1)
let mySerializedRequest = CFHTTPMessageCopySerializedMessage(myRequest)

无法使用类型为'(非托管&lt; CFHTTPMessage&gt;!)'的参数列表调用'CFHTTPMessageCopySerializedMessage'

1 个答案:

答案 0 :(得分:1)

这是您的工作代码:

let url = "http://www.apple.com"
let myURL = CFURLCreateWithString(kCFAllocatorDefault, url, nil)
let myRequest = CFHTTPMessageCreateRequest(kCFAllocatorDefault, "GET", myURL, kCFHTTPVersion1_1).takeRetainedValue()
let mySerializedRequest = CFHTTPMessageCopySerializedMessage(myRequest).takeRetainedValue()

当非托管对象的保留计数为takeRetainedValue时,您使用+1,并且您希望ARC在您完成后负责释放该对象。

在您的情况下,CFHTTPMessageCopySerializedMessage的定义是:

func CFHTTPMessageCopySerializedMessage(message: CFHTTPMessage!) -> Unmanaged<CFData>!

所以你必须传递CFHTTPMessage类型的参数,而你的myRequest类型不使用takeRetainedValue() Unmanaged<CFHTTPMessage>!,所以CFHTTPMessageCopySerializedMessage永远不会接受它,这就是为什么您最后必须添加takeRetainedValue(),如下所示:

let myRequest = CFHTTPMessageCreateRequest(kCFAllocatorDefault, "GET", myURL, kCFHTTPVersion1_1).takeRetainedValue()

它会正常工作。