Ios 如何在swift 3.0中使用非安全指针

Ios 如何在swift 3.0中使用非安全指针,ios,swift,camera,swift3,Ios,Swift,Camera,Swift3,我正在使用定位摄像头。 我正在做的是,当单击“捕获图像”按钮时,我收集字典中的所有位置信息,并在CFDictionarySetValue中进一步设置它。这就是我面临的问题。 CFDictionarySetValue的格式为dict、key、value,如下所示: CFDictionarySetValue((dictionary)CFMutableDictionary!, (key)UnsafeRawPointer!,(value) UnsafeRawPointer!) 我的字典、键和值如下:

我正在使用定位摄像头。
我正在做的是,当单击“捕获图像”按钮时,我收集字典中的所有位置信息,并在CFDictionarySetValue中进一步设置它。这就是我面临的问题。
CFDictionarySetValue
的格式为
dict、key、value
,如下所示:

CFDictionarySetValue((dictionary)CFMutableDictionary!, (key)UnsafeRawPointer!,(value) UnsafeRawPointer!)
我的字典、键和值如下:

CFDictionarySetValue((dictionary)CFMutableDictionary!, (key)UnsafeRawPointer!,(value) UnsafeRawPointer!)
字典:

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

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(可变,KCGimagePropertyGPDictionary,gpsDictionary)

我在上面的一行中得到一个错误:“无法将NSDictionary类型的值转换为UnSafeRawPointer!对于gpsDictionary”


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

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

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

let pGPSDictionary = Unmanaged.passUnretained(kCGImagePropertyGPSDictionary).toOpaque()
let pGpsDict = Unmanaged.passUnretained(gpsDict).toOpaque()
CFDictionarySetValue(mutable, pGPSDictionary, pGpsDict)
有一个更好的语法来创建
UnSafeRawPointer
s,我现在记不起来了