在Swift中,应该使用参数类型或返回值来隐式地专门化泛型函数。问题是,当我调用这样的函数时:
func serialize<T>(continuation: GenericWithLongName<T, NSError> -> Void) -> Void
我不能只写
serialize<SomeType> {
obj in
...
}
应该是
serialize {
(obj: GenericWithLongName<SomeType, NSError>) -> Void in
...
}
看起来很痛苦。
这个“特征”似乎存在了很长时间。这是一个设计决定吗?允许明确专业化是否有任何负面影响?
有没有什么方法可以使代码更整洁干净而不重构那个泛型类?
答案 0 :(得分:8)
“特化”函数的一种方法是将泛型类型包含为函数参数:
func serialize<T>(
t: T.Type,
continuation: GenericWithLongName<T, NSError> -> Void ) -> Void { }
现在你可以像这样“专门化”这个功能:
serialize(SomeType.self) {
obj in
...
}
我不知道为什么您要求的功能不可用的答案。我同意你推荐的功能会很有用,但同时这个功能同样适用,而且几乎一样简洁。