定义用于闭包的泛型类型

时间:2015-10-06 14:40:47

标签: swift generics swift2

我想定义一个泛型类型,用于一个闭包,它被定义为一个类的实例变量。我想传入一个泛型类型的数组,并确保出现的相同类型与进入的类型相同。我已经像这样写了(使用Swift 2.0),但它没有构建:

    var resultProcessing     :  <T: MyObjectType>((obj:Array<T>) -> Array<T>)?

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

没有。 resultProcessing是变量,变量必须具有特定类型,并且不能是通用的。

通用函数和类对于定义一些常见于许多类型的算法非常有用。 想象一下,您有不同的算法可以应用于任何类型的数组(例如,不同的排序算法)。因此,您为每个算法实现了通用函数:

func myFunc1<T>(obj: [T]) -> [T] {
  // body
}

func myFunc2<T>(obj: [T]) -> [T] {
  // body
}

在您将应用此功能的上下文中,您始终具有特定类型。例如,您的数组将包含字符串:

let myArray = ["one", "two", "three"]

接下来,根据您的条件定义将分配给特定功能的变量:

var myFunc: ([String] -> [String])?

if myConditionIsTrue {
    myFunc = myFunc1
} else {
    myFunc = myFunc2
}

然后你可以调用apply函数到array:

myFunc?(myArray)

我认为这就是你需要的。我是对的吗?