如何确保Generic的类型是一个闭包

时间:2017-07-17 03:40:16

标签: swift generics closures

我试图在swift中创建一个泛型类,以确保其类型参数是一个闭包。这个闭包可以采用任何类型的任意数量的参数。

class ClassWithClosure<Closure> {}

var sensical = ClassWithClosure<(Int) -> Double>() // This is okay.
var alsoFine = ClassWithClosure<(String, String) -> Bool>() // This is also okay.
var nonsensical = ClassWithClosure<String>() // This shouldn't work.

我遇到的麻烦是泛型类型约束只能是类或协议。

  

Swift Documentation
  类型约束指定类型参数必须从特定类继承,或符合特定协议或协议组合。

据我所知,没有只有闭包继承的类,也没有只有闭包符合的协议。

我能看到的两个选项是:

  • 我的班级没有类型限制,只是通过评论阻止滥用 这样做的问题在于什么类型的东西似乎应该被强制执行,而不仅仅是建议。
  • 不使用泛型类,只要在使用闭包的地方使用类型(_: Any...) -> Any? 再次,这摆脱了swifts不错的类型检查。

这两个选项似乎都值得怀疑,我怀疑有更好的方法。有没有办法将此泛型类的类型参数限制为闭包?

0 个答案:

没有答案
相关问题