对于给定的泛型函数
func myGenericFunction<T>() -> T { }
我可以设置泛型将使用的类
let _:Bool = myGenericFunction()
有没有办法做到这一点,所以我不必在另一行上分别定义一个变量?

例如:anotherFunction(myGenericFunction():Bool)

最佳答案

编译器需要一些上下文来推断T类型。在一个
变量赋值,可以通过类型注释或强制类型转换来完成:

let foo: Bool = myGenericFunction()
let bar = myGenericFunction() as Bool

如果anotherFunction采用Bool参数,则
anotherFunction(myGenericFunction())

可以正常工作,然后从参数类型推断出T

如果anotherFunction采用通用参数,则
再次转换作品:
anotherFunction(myGenericFunction() as Bool)

另一种方法是将类型作为参数传递
反而:
func myGenericFunction<T>(_ type: T.Type) -> T { ... }

let foo = myGenericFunction(Bool.self)
anotherFunction(myGenericFunction(Bool.self))

09-17 05:16