在Swift 3中桥接objective-c NSUInteger NS_ENUM

时间:2017-09-30 14:56:08

标签: objective-c swift objective-c-swift-bridge

我正在尝试将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
            }

        }
    }

}

0 个答案:

没有答案