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 入住酒店文案祝福语简短