РЕДАКТИРОВАТЬ: Решено, я ответил на вопрос ниже.
Я использую следующее для получения метаданных для PHAssets:
let data = NSData.init(contentsOf: url!)!
if let imageSource = CGImageSourceCreateWithData(data, nil) {
let metadata = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil)! as NSDictionary
}
Словарь метаданных содержит всеценности, которые я ищу.Однако некоторые поля, такие как ShutterSpeedValue
, ExposureTime
, в которых есть дроби, печатаются в виде десятичных дробей:
ExposureTime = "0.05"
ShutterSpeedValue = "4.321956769055745"
Когда я смотрю на эти данные в приложении предварительного просмотра моего Mac и exiftool, оно показывает:
ExposureTime = 1/20
ShutterSpeedValue = 1/20
Как получить правильную строку дроби вместо десятичной строки?
РЕДАКТИРОВАТЬ: Я попытался просто преобразовать десятичную строку в дробную строку, используя это из кода SO, но этоне правильно:
func rationalApproximation(of x0 : Double, withPrecision eps : Double = 1.0E-6) -> String {
var x = x0
var a = x.rounded(.down)
var (h1, k1, h, k) = (1, 0, Int(a), 1)
while x - a > eps * Double(k) * Double(k) {
x = 1.0/(x - a)
a = x.rounded(.down)
(h1, k1, h, k) = (h, k, h1 + Int(a) * h, k1 + Int(a) * k)
}
return "\(h)/\(k)"
}
Как вы заметили, десятичное значение ShutterSpeedValue
, напечатанное как 4.321956769055745
, даже не равно 1 / 20.