Swift 2には、次のプロトコルがあります
protocol Fightable {
// return true if still alive, false if died during fight
func fight (other: Fightable) -> Bool
}
protocol Stats {
var defense: Int { get }
var attack: Int { get }
}
Fightable のプロトコル拡張を実装してfight
、Stats
の型シグネチャfight
を
func fight (other: Self) -> Bool
拡張機能を次のように実装します
extension Fightable where Self : Stats {
func fight (other: Self) -> Bool {
return self.defense > other.attack
}
}
上記の実装の問題は、値の型が同じである必要があることです ( Human
s は s と戦うことができませんGoblin
)。fight
私の現在の目標は、 Stats を実装している限り、値の型の任意の組み合わせに対してのデフォルトの実装を提供するプロトコル拡張を実装することです。
次のコード
extension Fightable where Fightable : Stats {
func fight (other: Fightable) -> Bool {
return self.defense > other.attack
}
}
エラーが発生します
適合要件のタイプ 'Fightable' は、ジェネリック パラメータまたは関連付けられたタイプを参照していません
他のファイタブル タイプもこの拡張機能の統計に準拠していることを確認するにはどうすればよいですか?
Xcode 7 ベータ 1 を使用しています。