协议和初始化参数

时间:2019-01-16 10:10:52

标签: swift protocols init

一位前同事留下的游戏不完整,没有记载。

阅读他的代码时,我发现:

protocol EnemyMovement {
    func forward(speedPercent: Int)
    func reverse(speedPercent: Int)
    func left(speedPercent: Int)
    func right(speedPercent: Int)
}

protocol Enemy {
    var name: String {get set}
    var enemyMovement: EnemyMovement {get set}

    init (name: String, enemyMovement: EnemyMovement)
}

class EnemyInstance: Enemy {
    var name = "No enemy Name"
    var enemyMovement: EnemyMovement

    required init (name: String, enemyMovement: EnemyMovement) {
        self.name = name
        self.enemyMovement = enemyMovement
//...
}

我找不到EnemyInstance的具体实例,但是如果很清楚如何传递名称字符串,我不知道应该如何传递EnemyMovement。

var enemy = EnemyInstance(name: "zombie", enemyMovement?...)

有什么主意吗?

1 个答案:

答案 0 :(得分:0)

由于参数的类型必须符合$models->execute_kw($db, $uid, $password, 'res.partner', 'search_read', array(array(array('is_company', '=', true), array('customer', '=', true))), array('fields'=>array('name', 'country_id', 'comment'), 'limit'=>5)); ,包括这些方法,因此您必须传递此对象。因此,您可以尝试创建示例struct

EnemyMovement

现在作为struct Movements: EnemyMovement { func forward(speedPercent: Int) { print(speedPercent) } func reverse(speedPercent: Int) { print(speedPercent) } func left(speedPercent: Int) { print(speedPercent) } func right(speedPercent: Int) { print(speedPercent) } } 初始化程序的参数传递EnemyInstance的新实例

Movements

然后,您可以在类的var enemy = EnemyInstance(name: "zombie", enemyMovement: Movements()) 属性上调用某个方法,并执行该特定方法内的代码(在这种情况下,它应该显示enemyMovement

speedPercent