调用函数时明确指定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>