merge
中有两种RACSignal
方法:
- (RACSignal *)merge:(RACSignal *)signal;
+ (RACSignal *)merge:(id<NSFastEnumeration>)signals;
当我写RACSignal.merge
时,它引用静态方法:
class func merge(signals: NSFastEnumeration!) -> RACSignal!
如何引用对象方法?我无法写self.merge
,因为它位于包装类中,self
不是RACSignal
。
答案 0 :(得分:3)
curried的类函数和curried实例函数有 不同的签名。与
类似您可以通过明确指定签名来引用每个。
我没有使用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
答案 1 :(得分:1)
由于Swift中的方法是curried类函数,编译器必须决定选择哪个重载。
要引用实例的merge
方法,您需要指定它的确切类型:
let instanceMerge: RACSignal -> RACSignal! -> RACSignal! = RACSignal.merge