почему swift использует структуру в качестве словарного ключа вместо строки здесь? - PullRequest
2 голосов
/ 15 мая 2019

Почему тип UIImagePickerController.InfoKey является структурой, а не строкой, в чем преимущество использования структуры в качестве словарного ключа вместо строки?

public struct InfoKey : Hashable, Equatable, RawRepresentable {

    public init(rawValue: String)
}
}
extension UIImagePickerController.InfoKey {


public static let mediaType: UIImagePickerController.InfoKey

public static let originalImage: UIImagePickerController.InfoKey // a UIImage

public static let editedImage: UIImagePickerController.InfoKey // a UIImage

public static let cropRect: UIImagePickerController.InfoKey // an NSValue (CGRect)

1 Ответ

1 голос
/ 15 мая 2019

Все просто, преимущество заключается в возможности проверять ключевые значения во время компиляции.Таким образом, вы не сможете передать String напрямую, а если вы это сделаете, вам придется вручную обернуть его в InfoKey структуру, чтобы прояснить ваше намерение.

В большинстве случаев выследует использовать одну из предопределенных констант.

enum было бы лучшим решением, но, вероятно, это нарушило бы некоторый существующий код (и не может быть реально применено в Objective-C).

Если бы инженеры Apple создавали новый API сегодня, они, вероятно, даже не использовали бы словарь, но использовали бы собственный объект для передачи значений в метод делегата.

...