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 儿媳买车妈妈祝福语简短
14 毕业送礼老师祝福语简短
15 同事辞职正常祝福语简短
16 恭贺新婚文案祝福语简短
17 金店立秋祝福语简短英文
18 婆婆高寿祝福语大全简短