我已经尝试了很多方法来解决这个问题,但就是想不出任何可行的方法。谁能告诉我以下 Swift 代码有什么问题:
let incomingRequest: CFHTTPMessageRef? = CFDictionaryGetValue(self.incomingRequests as CFMutableDictionaryRef, unsafeAddressOf(incomingFileHandle!)) as CFHTTPMessageRef
上面的代码给出了错误信息:'UnsafePointer<Void>' is not convertible to 'CFHTTPMessageRef'
我想我不明白的是如何将 Core Foundation 函数返回的“UnsafePointer”转换为它应该是的指针类型(即本例中的 CFHTTPMessageRef)。我如何找到有关如何执行此操作的文档。我已经阅读了我能找到的所有内容,但到目前为止还没有任何内容解释如何将返回值重铸为它们最初应该具有的值。这必须在某处记录,不是吗?
编辑
这是我遇到问题的代码:
let incomingRequest = CFDictionaryGetValue(self.incomingRequests as CFMutableDictionaryRef, unsafeAddressOf(incomingFileHandle!))
unsafeBitCast(incomingRequest, CFHTTPMessageRef.self)
if (incomingRequest != nil) {
let success: Boolean = CFHTTPMessageAppendBytes(incomingRequest as CFHTTPMessageRef, unsafeAddressOf(data!.bytes) as UnsafePointer<UInt8>, data!.length)
if success { // Do something... }
CFHTTPMessageAppendBytes 调用仍然给出“Type 'UnsafePointer' does not conform to protocol 'AnyObject'”。下面的“如果”检查“成功”会提示“类型‘ bool ’不符合协议(protocol)‘ bool 类型’”。那到底是怎么回事? Boolean 不是 bool 类型?
我发现 Swift 的严格类型检查非常令人沮丧。到目前为止,它比 Obj-C、C 或我使用过的任何其他语言都难编写代码。我敢肯定这是因为我不明白,或者没有找到正确的文档,但这真的让我发疯。
请您参考如下方法:
使用不安全的BitCast。如下例:
import Foundation
var x = "1"
var dict : NSMutableDictionary = [x: "2"]
var y = CFDictionaryGetValue(dict as CFMutableDictionaryRef, unsafeAddressOf(x))
let str: NSString = unsafeBitCast(y, NSString.self)
str == "2"
仅供引用:有一个 quora 与 unsafeBitCast 相关。 http://www.quora.com/Why-does-Swift-not-allow-implicit-type-conversion
