在 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" 的位置不满意并且可能会抱怨。
我有一个 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" 的位置不满意并且可能会抱怨。