为什么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,他们甚至可能不会使用字典,而是会使用自定义对象将值传递给委托方法。