将快速结构暴露给ObjC

时间:2015-12-03 14:45:43

标签: ios objective-c swift struct

据我所知,无法在 Objective-c 代码中使用 Swift 结构。是否有最佳实践方法将swift结构“包装”到目标C类中,以便我可以在新代码中使用该结构但在遗留代码中保留类似的数据结构?

我能想到的最好的代码是非常繁重 - 但是它应该是一个协议,然后实现一个使用该协议的swift结构,然后是一个具有该结构内部成员的目标C类并揭露潜入其中的方法。

protocol ParsedMessageProtocol {
    var timeStamp : NSDate { get }
    var msgData : NSData? { get }
    var source : String { get }

    init(data : NSData)
    init(rawData data : NSData, dataSource : String)
    init(date : NSDate)
}

@objc(DMParsedMessage)
class ParsedMessageClass : NSObject, ParsedMessageProtocol {

    private var swiftData : ParsedMessageStruct;

    required init(data : NSData) {
        self.swiftData = ParsedMessageStruct(data: data);
    }
    required init(date : NSDate) {
        self.swiftData = ParsedMessageStruct(date: date);
    }

    required init(rawData data : NSData, dataSource : String) {
        self.swiftData = ParsedMessageStruct(rawData: data, dataSource: dataSource)
    }

    var timeStamp : NSDate {
        return self.swiftData.timeStamp
    }

    var msgData : NSData? {
        return self.swiftData.msgData
    }

    var source : String {
        return self.swiftData.source
    }


}

struct ParsedMessageStruct : ParsedMessageProtocol {
    let timeStamp : NSDate
    let msgData : NSData?
    let source : String

    init(data : NSData) {
        timeStamp = NSDate()
        self.msgData = data;
        self.source = "UNSET";
    }
    init(rawData data : NSData, dataSource : String) {
        timeStamp = NSDate()
        self.msgData = data;
        self.source = dataSource;
    }
    init(date : NSDate) {
        timeStamp = date
        self.source = "UNSET";
        self.msgData = nil;
    }
}

我没有机会测试这是否真的可以在 Objective-C 中运行,但这是一种合理的方法,如果没有 - 是否有人可以提供的锅炉版本较少?

0 个答案:

没有答案