我正在尝试获得类似这样的功能的参考:
class Toto { func toto() { println("f1") } func toto(aString: String) { println("f2") } } var aToto: Toto = Toto() var f1 = aToto.dynamicType.toto
我有以下错误: Ambiguous use of toto
Ambiguous use of toto
如何获得具有指定参数的功能?
由于Toto有两个名称相同但签名不同的方法,因此您必须指定所需的方法:
Toto
let f1 = aToto.toto as () -> Void let f2 = aToto.toto as (String) -> Void f1() // Output: f1 f2("foo") // Output: f2
或者(如@Antonio正确指出的):
let f1: () -> Void = aToto.toto let f2: String -> Void = aToto.toto
如果您需要将类的实例作为第一个参数的咖喱函数,则可以以相同的方式进行,只有签名不同(将@Antonios注释与您的问题进行比较):
let cf1: Toto -> () -> Void = aToto.dynamicType.toto let cf2: Toto -> (String) -> Void = aToto.dynamicType.toto cf1(aToto)() // Output: f1 cf2(aToto)("bar") // Output: f2