当前位置:  开发笔记 > IOS > 正文

将快速结构暴露给ObjC

如何解决《将快速结构暴露给ObjC》经验,为你挑选了0个好方法。

据我所知,没有办法在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中运行,但这是一种合理的方法,如果没有 - 是否有人能提供的锅炉版本较少?

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有