在 Swift 中传递 @protocol 类型

Pass @protocol type in Swift

我有一个 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 中定义的协议传递给此方法吗?

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

MyClass.proxyWithProtocol(AProtocol)

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

@objc protocol MyProtocol {
    func someGreatFunc()
}

// ...

MyClass.proxyWithProtocol(MyProtocol)

在 Swift 3 中,根据 class 桥接到 Swift 的方式,您的函数可能如下所示:

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

虽然编译器对 "with" 的位置不满意并且可能会抱怨。