【发布时间】:2016-10-23 16:13:12
【问题描述】:
我有一些代码可以从文件中获取 EXIF 数据,但它使用 NS-Types。我喜欢让 Swift 3 符合并使用标准的 swift 类型,如 Dictionary 或 String。删除“NS”时,出现“.value()”不存在的错误。并且编译器没有提示什么是新函数调用:
let imageSource = CGImageSourceCreateWithURL(url as CFURL, nil)
let imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource!, 0, nil)! as NSDictionary
let exifDict = imageProperties.value(forKey: "{Exif}") as! NSDictionary
let dateTimeOriginal = exifDict.value(forKey: "DateTimeOriginal") as! NSString
print ("DateTimeOriginal: \(dateTimeOriginal)")
let PixelXDimension = exifDict.value(forKey: "PixelXDimension") as! Double
print ("PixelXDimension: \(PixelXDimension)")
let exifDictTIFF = imageProperties.value(forKey: "{TIFF}") as! NSDictionary
// optional
if let Software = exifDictTIFF.value(forKey: "Software") as? NSString {
print ("Software: \(Software)")
}
任何提示如何更改它?
另外: 使用这个
let imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource!, 0, nil)! as Dictionary
let exifDict = imageProperties["{Exif}"] as! Dictionary
将为第二行提供错误“对成员 'subScript' 的模糊引用”!
【问题讨论】:
-
只需使用密钥订阅
imageProperties["{Exif}"]。使用 nevervalueForKey从字典中获取单个值。但要小心:据我所知,将CGImageSourceCopyPropertiesAtIndex转换为 SwiftDictionary并没有奏效。但这可能会在 Swift 3 中得到修复。 -
好的,那我该怎么办?我在 NSDictionary 上工作得很好。我喜欢有字典。
-
字典是通用的。您必须提供一个类型,例如
Dictionary<String,Any> -
不会是
as [String : Any],而不是as Dictionary<String,Any>吗? -
是的,这就是工作(作为 [String : Any])。非常感谢。
标签: swift dictionary nsdictionary