[英]Protocol oriented Programming Swift - Identifiable
Lets say I want to model a fantasy-game with protocol oriented programming in swift.假设我想用面向协议的编程快速建模一个幻想游戏。 the code below produces the following error:
下面的代码产生以下错误:
Protocol 'Character' can only be used as a generic constraint because it has Self or associated type requirements
协议“字符”只能用作通用约束,因为它具有 Self 或关联类型要求
what's the problem here?这里有什么问题? how to do it right?
怎么做才对?
protocol Character: Identifiable {
var name: String {get}
var maxHealt: Int {get}
var healt: Int { get set }
}
extension Character {
var id: String {return name}
mutating func setHealth(newValue: Int) {
healt = newValue
}
}
protocol Fighter {
var attackPower: Int { get }
}
extension Fighter {
func attack(enemy: Character ) -> Character {
var enemy = enemy
enemy.setHealth(newValue: enemy.maxHealt - self.attackPower)
return enemy
}
}
You need to add generic constraints.您需要添加通用约束。
extension Fighter {
func attack<T: Character>(enemy: T ) -> T { //<-- Here
var enemy = enemy
enemy.setHealth(newValue: enemy.maxHealt - self.attackPower)
return enemy
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.