调用函数时明确指定generics约束

我想知道是否有可能在Swift中明确指定generics函数的genericstypes。 假设我有下面的函数定义,它基本上创build了一个genericstypesT的空数组:

 func bar<T>() -> [T] { return [T]() } 

我怎么能打电话呢?

 var foo = bar() 

结果是

通用参数“T”无法推断

这是完全有道理的,因为在这里真的没有任何信息来推断任何东西。

但不幸的是,我试图通过以下方式明确指定types约束失败:

 var foo = bar<Int>() 

错误:不能明确地专门化一个通用函数

  • 为什么我无法做到这一点?
  • 这是一个语言规范,不能明确指定generics?
  • 用什么方法来指定函数的generics?

用什么方法来指定函数的generics?

通用types可以从上下文中推断出来:

 func bar<T>() -> [T] { return [T]() } let val1 = bar() as [Int] // or: let val2 : [Int] = bar() 

(我不能回答其他问题。)

该语言不允许您明确地专门化该function。 我不知道为什么他们这样实施。 你更有可能在swift-users邮件列表上得到这个问题的答案。

解决这个问题的典型方法是让函数把这个types作为参数:

 func bar<T>(_: T.Type) -> [T] { return [T]() } bar(Int.self) // Result: [], with type Array<Int>