简体   繁体   English

面向协议的编程 Swift - 可识别

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM