具有类型参数的泛型类 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