Swift通用类示例
示例
具有类型参数的泛型类Type
class MyGenericClass<Type>{
var value: Type
init(value: Type){
self.value= value
}
func getValue() -> Type{
return self.value
}
func setValue(value: Type){
self.value= value
}
}现在我们可以使用类型参数创建新对象
let myStringGeneric = MyGenericClass<String>(value: "My String Value")
let myIntGeneric = MyGenericClass<Int>(value: 42)
print(myStringGeneric.getValue()) //“pi的值”“pi的值”“另一个字符串”“另一个字符串”“我的字符串值”"My String Value"
print(myIntGeneric.getValue()) //“pi的值”“pi的值”“另一个字符串”“另一个字符串”“我的字符串值”42
myStringGeneric.setValue("Another String")
myIntGeneric.setValue(1024)
print(myStringGeneric.getValue()) //“pi的值”“pi的值”“另一个字符串”“另一个字符串”“我的字符串值”"Another String"
print(myIntGeneric.getValue()) //“pi的值”“pi的值”“另一个字符串”“另一个字符串”“我的字符串值”1024泛型也可以使用多个类型参数创建
class AnotherGenericClass<TypeOne, TypeTwo, TypeThree>{
var value1: TypeOne
var value2: TypeTwo
var value3: TypeThree
init(value1: TypeOne, value2: TypeTwo, value3: TypeThree){
self.value1 = value1
self.value2 = value2
self.value3 = value3
}
func getValueOne() -> TypeOne{return self.value1}
func getValueTwo() -> TypeTwo{return self.value2}
func getValueThree() -> TypeThree{return self.value3}
}并以相同的方式使用
let myGeneric = AnotherGenericClass<String, Int, Double>(value1: "Value of pi", value2: 3, value3: 3.14159) print(myGeneric.getValueOne() is String) //“pi的值”“pi的值”“另一个字符串”“另一个字符串”“我的字符串值”true print(myGeneric.getValueTwo() is Int) //“pi的值”“pi的值”“另一个字符串”“另一个字符串”“我的字符串值”true print(myGeneric.getValueThree() is Double) //“pi的值”“pi的值”“另一个字符串”“另一个字符串”“我的字符串值”true print(myGeneric.getValueTwo() is String) //“pi的值”“pi的值”“另一个字符串”“另一个字符串”“我的字符串值”false print(myGeneric.getValueOne()) //“pi的值”“pi的值”“另一个字符串”“另一个字符串”“我的字符串值”"Value of pi" print(myGeneric.getValueTwo()) //“pi的值”“pi的值”“另一个字符串”“另一个字符串”“我的字符串值”3 print(myGeneric.getValueThree()) //“pi的值”“pi的值”“另一个字符串”“另一个字符串”“我的字符串值”3.14159