在Swift

时间:2016-06-28 14:04:18

标签: objective-c swift swift-protocols swift3

我有一个Objective-C方法,它将Protocol *类型作为参数。

如何在Swift中调用此方法。

示例:

// In Objective-C

@protocol AProtocol <NSObject>
@end

@interface MyClass : NSObject
+ (id)proxyWithProtocol:(Protocol*)protocol;
@end

// I can call this method with a protocol as parameter
[MyClass proxyWithProtocol:@protocol(AProtocol)];

如果我想通过桥接在Swift中使用MyClass。如何将Objective-C中定义的协议传递给proxyWithProtocol方法。我甚至可以将Swift中定义的协议传递给这个方法吗?

1 个答案:

答案 0 :(得分:2)

您可以像这样传递Objective-C协议:

MyClass.proxyWithProtocol(AProtocol)

如果您想传入Swift协议,则必须将该协议公开给Objective-C:

@objc protocol MyProtocol {
    func someGreatFunc()
}

// ...

MyClass.proxyWithProtocol(MyProtocol)

在Swift 3中,根据类与Swift的桥接方式,你的函数可能如下所示:

MyClass.proxy(with: AProtocol)
MyClass.proxy(with: MyProtocol)

虽然编译器对“with”的位置不满意,但可能会抱怨。