SWIFT:如何防止在两个符合相同协议的结构初始化器中重复代码?

332nm8kg  于 2022-10-23  发布在  Swift
关注(0)|答案(1)|浏览(133)

我有一个定义简单词典的协议:

protocol P {
    var dictionary: [String: Any] { get }
}

和符合它的两个结构:

struct S1: P {
    var moreInfo: [String]
    var dictionary: [String: Any]
}

struct S2: P {
    var dictionary: [String: Any]
}

我希望从给定的对象初始化这些结构,因此初始化式如下所示:

init(from data: [[String: Any]]) {
    dictionary = process(data)
    // Specifically in S1
    moreInfo = moreInfoProcess(data)
}

防止在S1和S2中重复使用相同代码来处理数据和设置dictionary的最佳解决方案是什么?
谢谢你的帮助

efzxgjgh

efzxgjgh1#

最简单的方法是在P的扩展中实现公共代码(并将其设置为静态以避免编译错误)

extension P {
    static func process(_ data: [[String: Any]]) -> [String: Any] {
        var result = [String: Any]()
        // processing code...
        return result
    }
}

相关问题