我有一个Swift协议定义如下:
protocol SmartContract {
func apply(transaction :Transaction)
func addBrokenRule(_ brokenRule: BrokenRule)
var brokenRules :[BrokenRule] { get set }
}
我在SmartContract上有一个扩展,定义如下:
extension SmartContract {
mutating func addBrokenRule(_ brokenRule :BrokenRule) {
if self.brokenRules == nil {
self.brokenRules = [BrokenRule]()
}
self.brokenRules.append(brokenRule)
}
}
我还有一个MoneyTransferContract类,它符合协议但未定义brokenRules
。这是因为我已经定义brokenRules
了扩展名的内部。
class MoneyTransferContract : SmartContract {
func apply(transaction :Transaction) { // do something here }
}
我的问题是我如何确保MoneyTransformContract符合SmartContract协议。无论如何,MoneyTransformContract可以使用BrokenRule,而不必在不同的SmartContracts中一次又一次地定义它。
约翰·道伊写道:
无论如何,MoneyTransformContract可以使用BrokenRule,而不必在不同的SmartContracts中一次又一次地定义它。
您想要的是该行为的超类/子类关系。
class SmartContract {
func apply(transaction :Transaction) {
//implemention
}
var brokenRules: [BrokenRule] = []
func addBrokenRule(_ brokenRule :BrokenRule) {
brokenRules.append(brokenRule)
}
}
class MoneyTransferContract : SmartContract {
// Gets `brokenRules` for free from superclass.
}
class BitCoinTransferContract : SmartContract {
// Gets `brokenRules` for free from superclass.
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句