Swift3 斯威夫特认为我的绳子是MDL材料

Swift3 斯威夫特认为我的绳子是MDL材料,swift3,Swift3,我正在尝试将数据保存在iOS/Swift3中的图像元数据中。CG似乎不允许您保存自定义标记(这是真的吗?),因此我对字典进行了JSON编码,并将结果作为字符串放入TIFF标记的ImageDescription中。当我加载图像并取回元数据时 if let data = NSData(contentsOfFile:oneURL.path), let imgSrc = CGImageSourceCreateWithData(data, options as CFDictionary) { le

我正在尝试将数据保存在iOS/Swift3中的图像元数据中。CG似乎不允许您保存自定义标记(这是真的吗?),因此我对字典进行了JSON编码,并将结果作为字符串放入TIFF标记的ImageDescription中。当我加载图像并取回元数据时

if let data = NSData(contentsOfFile:oneURL.path), let imgSrc = CGImageSourceCreateWithData(data, options as CFDictionary) {
    let allmeta = CGImageSourceCopyPropertiesAtIndex(imgSrc, 0, options as CFDictionary) as? [String : AnyObject]
allMeta
包含(除其他内容外):

里面有JSON数据,耶!所以现在我只需要获取TIFF元数据,从中获取ImageDescription,然后将其反JSON

let tiffmeta = allmeta?["{TIFF}"]
if let tiffMeta = tiffmeta {
    let descmeta = tiffMeta["ImageDescription"]
    var descdata = descmeta?.data(usingEncoding: NSUTF8StringEncoding)!
    let descdict = try? JSONSerialization.jsonObject(with: descdata, options: [])
但这不会编译。Xcode在
let descdata
行上出现错误:

类型“MDLMaterialProperty”的值没有成员“数据”

我尝试将其强制转换为上面一行中的
String
,这时它抱怨我没有打开可选的MDLMaterialProperty


我在这里遗漏了一些明显的东西吗?

因此,仅关闭这一个,这似乎是编译器中的一个问题。我对语法做了一些小改动,没有对代码产生任何实际影响,突然它决定对象确实是一个字符串。

注意,Swift中包含
T
值的字典的字典访问器返回一个
T?
。我建议您使用
if let tiffMeta=tiffMeta
打开可选的,而不是检查
tiffMeta
是否为零。这样做将为您提供一个非可选类型,您可以进一步使用它。您还需要使用可选链接:
descmeta?.data(…)
。很有用,但我仍然有相同的问题,它仍然认为descmeta是MDL类型。
let tiffmeta = allmeta?["{TIFF}"]
if let tiffMeta = tiffmeta {
    let descmeta = tiffMeta["ImageDescription"]
    var descdata = descmeta?.data(usingEncoding: NSUTF8StringEncoding)!
    let descdict = try? JSONSerialization.jsonObject(with: descdata, options: [])