public protocol Primitive {} extension String: Primitive {} extension Int: Primitive {} extension Double: Primitive {} extension Float: Primitive {} extension Bool: Primitive {} extension Array: Primitive where Element: Primitive {} extension Dictionary: Primitive where Key == String, Value: Primitive {} public protocol UserInfoable { var userInfo: [String: Primitive] { get set } }