为什么UIImagePickerController.InfoKey类型的struct不是字符串,使用struct作为字典键而不是字符串有什么好处?

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)

最佳答案

很简单,好处是能够在编译期间检查键值。这样,您将无法直接传递String,如果这样做,则必须手动将其包装到InfoKey结构中,以使意图明确。

大多数时候,您应该使用预定义的常量之一。

enum是一个更好的解决方案,但可能会破坏一些现有代码(并且不能在Objective-C中真正实施)。

如果Apple工程师今天正在创建新的API,他们甚至可能不会使用字典,而是会使用自定义对象将值传递给委托方法。

08-05 21:37