我正在尝试将objective-c SDK与swift实现联系起来。我有一个示例,说明在objective-c中的实现是什么,但似乎无法在swift中的可行解决方案中实现它。枚举在下面的objective-c头文件中:
typedef NS_ENUM(NSUInteger, MTSCRATransactionStatus)
{
TRANS_STATUS_OK,
TRANS_STATUS_START,
TRANS_STATUS_ERROR
};
Objective-C用法:
- (void)onDataEvent:(id)status
{
//[self clearLabels];
switch ([status intValue]) {
case TRANS_STATUS_OK:
NSLog(@"TRANS_STATUS_OK");
break;
case TRANS_STATUS_ERROR:
NSLog(@"TRANS_STATUS_ERROR");
break;
default:
break;
}
}
我需要将其改为快速等同物。但是,我无法完成这项工作,并尝试了不同的状态铸造。
func trackDataReady (notification: NSNotification) {
let status = notification.userInfo?["status"] as? NSNumber
self.performSelector(onMainThread:
#selector(CardReaderClass.onDataEvent), with: status,
waitUntilDone: true)
}
func onDataEvent (status: Any) {
switch status.intValue {
case .TRANS_STATUS_START:
print("TRANS_STATUS_START")
break
case .TRANS_STATUS_OK:
print("TRANS_STATUS_OK")
returnData()
break
case .TRANS_STATUS_ERROR:
print("TRANS_STATUS_ERROR")
returnError()
break
}
}
虽然这似乎与How to use Objective-C enum in Swift
重复主要问题围绕这行代码:
[status intValue]
对于NS_ENUM,Swift等价物将被赋予什么。
修改 的解
func onDataEvent (status: Any) {
if let statusInt = status as? Int {
if let newStatus = MTSCRATransactionStatus(rawValue: UInt(statusInt)) {
switch newStatus {
case .TRANS_STATUS_START:
print("TRANS_STATUS_START")
break
case .TRANS_STATUS_OK:
print("TRANS_STATUS_OK")
returnData()
break
case .TRANS_STATUS_ERROR:
print("TRANS_STATUS_ERROR")
returnError()
break
}
}
}
}