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

标签 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)

无法使用“(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/

相关文章:

ios - 在 Swift 中运行 Firebase 时出错

ios - 更改 Google map 大小 iOS Swift

macos - _SCDynamicStoreCopyProxies 上的错误未找到符号

ios - 我如何确定 App Transport Security 阻止了哪个 URL?

ios - 如何快速读取文档目录中的 json 文件?

ios - 供应配置文件资格失败

iphone - 从 RSS 数据中的链接获取完整详细信息

ios - 将 Swift 包管理器 (SPM) 用于现有 [iPhone 应用程序] XCode 项目(具有 Swift + Objective C 文件)

ios - 带整数的 switch 语句

ios - CFNetwork 在 iOS 中使用 swift 崩溃