【发布时间】:2020-03-02 17:03:36
【问题描述】:
我有这样的 Swift 枚举:
@objc public enum Status: Int {
case unknown;
case ok;
case failed;
}
它已正确桥接到 Objective-C,我可以将它用作 Objective-C 中的 StatusUnknown。
现在我有了一个回调函数:
+ (void)fetch:(void (^_Nonnull)(BOOL success))completion
我只想用我的Status 枚举替换BOOL。该怎么做?
显然不是这样的:
+ (void)fetch:(void (^_Nonnull)(Status success))completion // Error: Unknown type name
我可以像这样使用NSInteger:
+ (void)fetch:(void (^_Nonnull)(NSInteger success))completion
但它并没有真正限制 Status 枚举的值。
那么在这里传达枚举的最佳方式是什么?
注意:
- 我简化了问题,实际上枚举不称为状态,并且具有更多值。
- 函数的签名必须与之前的签名匹配,但参数不同
【问题讨论】:
-
我不知道objective-C,但是我写了一些Swift代码并查看了生成的头文件。我看到枚举被转换为带有 typedef
typedef SWIFT_ENUM(NSInteger, Status, closed) { StatusUnknown = 0, StatusOk = 1, StatusFailed = 2, };的enum Status : NSInteger;,并且接受闭包的方法变为- (void)f:(void (^ _Nonnull)(enum Status))c;。这行得通吗?
标签: objective-c swift enums