Ios 调用函数时显式指定泛型类型约束
我想知道在Ios 调用函数时显式指定泛型类型约束,ios,swift,generics,Ios,Swift,Generics,我想知道在Swift中是否可以显式指定泛型函数的泛型类型。假设我有以下函数定义,它基本上创建了泛型类型的空数组T: func bar<T>() -> [T] { return [T]() } 导致 无法推断泛型参数“T” 这是完全有道理的,因为这里确实没有任何信息可以推断 但不幸的是,我尝试通过以下方式显式指定类型约束也失败了: var foo = bar<Int>() var foo=bar() 错误:无法显式专门化泛型函数 为什么我不能这样做 不
Swift
中是否可以显式指定泛型函数的泛型类型。假设我有以下函数定义,它基本上创建了泛型类型的空数组T
:
func bar<T>() -> [T] {
return [T]()
}
导致
无法推断泛型参数“T”
这是完全有道理的,因为这里确实没有任何信息可以推断
但不幸的是,我尝试通过以下方式显式指定类型约束也失败了:
var foo = bar<Int>()
var foo=bar()
错误:无法显式专门化泛型函数
- 为什么我不能这样做李>
- 不能显式指定泛型类型是语言规范吗
- 有什么方法可以指定函数的泛型类型
func bar<T>() -> [T] {
return [T]()
}
let val1 = bar() as [Int] // or:
let val2 : [Int] = bar()
func bar()->[T]{
返回[T]()
}
将val1=bar()设为[Int]//或:
设val2:[Int]=bar()
(我无法回答其他问题。)该语言不允许您显式地专门化函数。我不知道他们为什么用这种方式实施。您更有可能在swift用户邮件列表中找到该问题的答案 解决此问题的典型方法是使函数将类型作为参数:
func bar<T>(_: T.Type) -> [T] {
return [T]()
}
bar(Int.self)
// Result: [], with type Array<Int>
func条(uu:T.Type)->[T]{
返回[T]()
}
条形图(Int.self)
//结果:[],类型为Array
好的,但是如果我的函数返回一个(T,[(T,T[T]))
(我怀疑一个好的底层设计)例如,我将不得不在每个T
-place中用Int
重新键入整个类型?@luk2302:编译器必须以某种方式从上下文推断类型。如果您将bar()
作为参数传递给接受数组参数的函数,那么它也应该可以工作也许会有一个更好的答案,但这正是我想出来的。是的,我知道它需要以某种方式获得类型,我基本上不明白为什么显式指定它不起作用-但无论如何,谢谢你!感谢您的回答和Int.self
-解决方案。我可能会在邮件列表上发表我的第一篇文章,而不是仅仅阅读它。
func bar<T>(_: T.Type) -> [T] {
return [T]()
}
bar(Int.self)
// Result: [], with type Array<Int>