来自不同 class 的引用方法作为柯里化函数

Reference method from different class as curried function

RACSignal中有两个merge方法:

- (RACSignal *)merge:(RACSignal *)signal;
+ (RACSignal *)merge:(id<NSFastEnumeration>)signals;

当我写 RACSignal.merge 时它引用了静态方法:

class func merge(signals: NSFastEnumeration!) -> RACSignal!

如何引用对象方法?我不能写 self.merge,因为它在包装器 class 中,而 self 不是 RACSignal

柯里化class函数和柯里化实例函数有 不同的签名。类似于

您可以通过明确指定签名来引用每个。

我没有使用 RACSignal 的经验,所以这是一个人工的 希望可以应用于您的案例的示例:

class MyClass {
    class func foo(s : String) {
        println("class foo: \(s)")
    }
    func foo(s : String) {
        println("instance foo: \(s)")
    }
}

// Reference to the class method:
let f1 : String -> Void = MyClass.foo

// Call the class method:
f1("bar")
// Output: class foo: bar

// Reference to the instance method:
let f2 : MyClass -> String -> Void = MyClass.foo

// Call the instance method:
let obj = MyClass()
f2(obj)("bar")
// Output: instance foo: bar

由于 Swift 中的方法是柯里化 class 函数,编译器必须决定选择哪个重载。

要引用实例的 merge 方法,您需要指定它的确切类型:

let instanceMerge: RACSignal -> RACSignal! -> RACSignal! = RACSignal.merge