Swift3 斯威夫特认为我的绳子是MDL材料
我正在尝试将数据保存在iOS/Swift3中的图像元数据中。CG似乎不允许您保存自定义标记(这是真的吗?),因此我对字典进行了JSON编码,并将结果作为字符串放入TIFF标记的ImageDescription中。当我加载图像并取回元数据时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
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: [])