0
我試圖將數據保存在iOS/Swift3中的圖像元數據。看起來CG不會讓你保存自定義標籤(這是真的嗎?),所以我JSON編碼我的字典並將結果作爲字符串放入TIFF標籤的ImageDescription中。當我加載圖像和獲取元數據回...斯威夫特認爲我的字符串是一個MDL材料
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
包含(除其他事項外):
▿ 0 : 2 elements
- key : ImageDescription
- value : {
"CameraOrientationW" : 0.1061191,
"CameraOrientationZ" : -0.01305595,
"CameraOrientationX" : 0.01319851,
"CameraOrientationY" : 0.9941801
}
它具有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
行錯誤:
Value of type 'MDLMaterialProperty??' has no member 'data'
我嘗試了強制轉換爲String
上面的線,此時它抱怨我沒有拆開包裝的可選MDLMaterialProperty。
我在這裏錯過了一些明顯的東西嗎?
請注意,在Swift中,包含「T」值的字典中的字典訪問器將返回一個「T?」。 我建議你使用'if let tiffMeta = tiffmeta'解開可選項,而不是檢查'tiffmeta'是否爲零。這樣做會給你一個非可選的類型,然後你可以繼續工作。你還需要使用可選鏈:'descmeta?.data(...)'。 – AustinZ
有用,但我仍然有同樣的問題,它仍然認爲descmeta是一種MDL類型。 –