Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 协议和初始参数_Swift_Protocols_Init - Fatal编程技术网

Swift 协议和初始参数

Swift 协议和初始参数,swift,protocols,init,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}

一个前大学生留下了一个未完成且未记录的游戏

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

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?...)

有什么想法吗?

因为参数的类型必须符合
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
初始值设定项的参数传递
移动的新实例

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


该参数应该是符合
EnemyMovement
的结构或类的实例。您需要声明符合
EnemyMovement
协议的具体类型(尽管在其当前形式下,它看起来根本不应该是协议),并将该具体类型传递给初始值设定项。哦,抱歉,由于有上千行,我真的很累,我想我同事的想法是传入一个init函数
required init (name: String, enemyMovement: EnemyMovement) {
    self.name = name
    self.enemyMovement = enemyMovement
    enemyMovement.forward(speedPercent: 2) // prints 2
}