问题描述
假设我想用面向协议的编程快速建模一个幻想游戏。 下面的代码产生以下错误:
Protocol 'Character' 只能用作通用约束,因为 它有自己或相关的类型要求
这里有什么问题?怎么做才对?
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
}
}
解决方法
您需要添加通用约束。
extension Fighter {
func attack<T: Character>(enemy: T ) -> T { //<-- Here
var enemy = enemy
enemy.setHealth(newValue: enemy.maxHealt - self.attackPower)
return enemy
}
}