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
}