来自不同 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
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