Jee*_*eef 6 struct objective-c ios swift
据我所知,没有办法在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;
}
}
Run Code Online (Sandbox Code Playgroud)
我没有机会测试这是否真的可以在Objective-C中运行,但这是一种合理的方法,如果没有 - 是否有人能提供的锅炉版本较少?
| 归档时间: |
|
| 查看次数: |
995 次 |
| 最近记录: |