一尘不染

Swift-获取对具有相同名称但参数不同的函数的引用

swift

我正在尝试获得类似这样的功能的参考:

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

如何获得具有指定参数的功能?


阅读 313

收藏
2020-07-07

共1个答案

一尘不染

由于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
2020-07-07