我遵循了 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)
无法使用“(Unmanaged< CFHTTPMessage>!)”类型的参数列表调用“CFHTTPMessageCopySerializedMessage”
最佳答案
这是您的工作代码:
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()
它会正常工作。
关于ios - 无法使用类型为 'CFHTTPMessageCopySerializedMessage' 的参数列表调用 '(Unmanaged<CFHTTPMessage>!)',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31356020/