符合Swift使用扩展协议

约翰·杜

我有一个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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章