我跟着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)
无法使用类型为'(非托管< CFHTTPMessage>!)'的参数列表调用'CFHTTPMessageCopySerializedMessage'
答案 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()
它会正常工作。