如何在swift 3.0中使用UnSafeRawPointer

时间:2016-12-05 10:27:22

标签: ios swift camera swift3

我在相机上工作 我正在做的是当单击“捕获图像”按钮时,我将所有位置信息收集到字典中,并进一步将其设置为CFDictionarySetValue。这是我面临的问题 CFDictionarySetValue的格式为dict, key, value,如下所示:

CFDictionarySetValue((dictionary)CFMutableDictionary!, (key)UnsafeRawPointer!,(value) UnsafeRawPointer!)

我的字典,键和值如下:

词典:

let mutable : CFMutableDictionary = CFDictionaryCreateMutableCopy(nil, 0, metaDict)

键:

kCGImagePropertyGPSDictionary

let gpsDict : NSDictionary = [kCGImagePropertyGPSLatitude: Int(fabs(loc.coordinate.latitude)), kCGImagePropertyGPSLatitudeRef : ((loc.coordinate.latitude >= 0) ? "N" : "S"), kCGImagePropertyGPSLongitude : Int(fabs(loc.coordinate.longitude)),kCGImagePropertyGPSLongitudeRef : ((loc.coordinate.longitude >= 0) ? "E" : "W") , kCGImagePropertyGPSTimeStamp  : formatter.string(from: loc.timestamp), kCGImagePropertyGPSAltitude  : Int(fabs(loc.altitude))]

看起来像CFDictionarySetValue(mutable, kCGImagePropertyGPSDictionary, gpsDictionary)

我在上面的帖子中收到错误说:"Cannot convert value of type NSDictionary to UnSafeRawPointer! for gpsDictionary"

尝试了一些方法,但仍然没有成功。

1 个答案:

答案 0 :(得分:3)

您将NSDictionary作为参数传递给CFDictionarySetValue(...),但期望的类型是UnSafeRawPointer类型的指针。第二个参数kCGImagePropertyGPSDictionary也是如此。您正在传递NSString而不是指针。

要解决此问题,请为两个参数创建指针。一种可能的方法:

let pGPSDictionary = Unmanaged.passUnretained(kCGImagePropertyGPSDictionary).toOpaque()
let pGpsDict = Unmanaged.passUnretained(gpsDict).toOpaque()
CFDictionarySetValue(mutable, pGPSDictionary, pGpsDict)

有一个更好的语法来创建UnSafeRawPointer,我现在不记得了。