Swift 约束泛型占位符类型
示例
例如,可以强制泛型类的类型参数来实现协议,Equatable
class MyGenericClass<Type: Equatable>{
var value: Type
init(value: Type){
self.value= value
}
func getValue() -> Type{
return self.value
}
func valueEquals(anotherValue: Type) -> Bool{
returnself.value== anotherValue
}
}每当我们创建一个new时MyGenericClass,type参数都必须实现Equatable协议(确保可以使用将该type参数与相同类型的另一个变量进行比较==)
let myFloatGeneric = MyGenericClass<Double>(value: 2.71828) //“无法将类型为“字符串”的值转换为预期的参数类型为“Int””“无法将类型为“字符串”的值转换为预期的参数类型为“Int””“类型[Int]不符合协议'Equatable'”“类型[Int]不符合协议'Equatable'”有效
let myStringGeneric = MyGenericClass<String>(value: "My String") //“无法将类型为“字符串”的值转换为预期的参数类型为“Int””“无法将类型为“字符串”的值转换为预期的参数类型为“Int””“类型[Int]不符合协议'Equatable'”“类型[Int]不符合协议'Equatable'”有效
//“无法将类型为“字符串”的值转换为预期的参数类型为“Int””“无法将类型为“字符串”的值转换为预期的参数类型为“Int””“类型[Int]不符合协议'Equatable'”"Type [Int] does not conform to protocol 'Equatable'"
let myInvalidGeneric = MyGenericClass<[Int]>(value: [2])
let myIntGeneric = MyGenericClass<Int>(value: 72)
print(myIntGeneric.valueEquals(72)) //“无法将类型为“字符串”的值转换为预期的参数类型为“Int””“无法将类型为“字符串”的值转换为预期的参数类型为“Int””“类型[Int]不符合协议'Equatable'”true
print(myIntGeneric.valueEquals(-274)) //“无法将类型为“字符串”的值转换为预期的参数类型为“Int””“无法将类型为“字符串”的值转换为预期的参数类型为“Int””“类型[Int]不符合协议'Equatable'”false
//“无法将类型为“字符串”的值转换为预期的参数类型为“Int””“无法将类型为“字符串”的值转换为预期的参数类型为“Int””“类型[Int]不符合协议'Equatable'”"Cannot convert value of type 'String' to expected argument type 'Int'"
print(myIntGeneric.valueEquals("My String"))
热门推荐
10 同事换单位简短祝福语
11 谢谢朋友的祝福语简短
12 立秋节气简短祝福语
13 新房祝福语简短10字
14 长辈新年祝福语大全简短
15 新年给大家简短祝福语
16 生日祝福语简短独特姑姑
17 芭比的婚礼祝福语简短
18 邀请新人祝福语简短英文