2017-03-15 51 views
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。

我在這裏錯過了一些明顯的東西嗎?

+0

請注意,在Swift中,包含「T」值的字典中的字典訪問器將返回一個「T?」。 我建議你使用'if let tiffMeta = tiffmeta'解開可選項,而不是檢查'tiffmeta'是否爲零。這樣做會給你一個非可選的類型,然後你可以繼續工作。你還需要使用可選鏈:'descmeta?.data(...)'。 – AustinZ

+0

有用,但我仍然有同樣的問題,它仍然認爲descmeta是一種MDL類型。 –

回答

0

所以只是爲了關閉這個,這似乎是編譯器中的一個問題。我對語法做了一些小的修改,沒有對代碼產生任何實際影響,並且突然間它確定對象確實是一個字符串。