3

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 のプロトコル拡張を実装してfightStatsの型シグネチャfight

func fight (other: Self) -> Bool

拡張機能を次のように実装します

extension Fightable where Self : Stats {
    func fight (other: Self) -> Bool {
        return self.defense > other.attack
    }
}

上記の実装の問題は、値の型が同じである必要があることです ( Humans は s と戦うことができませんGoblin)。fight私の現在の目標は、 Stats を実装している限り、値の型の任意の組み合わせに対してのデフォルトの実装を提供するプロトコル拡張を実装することです。

次のコード

extension Fightable where Fightable : Stats {
    func fight (other: Fightable) -> Bool {
        return self.defense > other.attack
    }
}

エラーが発生します

適合要件のタイプ 'Fightable' は、ジェネリック パラメータまたは関連付けられたタイプを参照していません

他のファイタブル タイプもこの拡張機能の統計に準拠していることを確認するにはどうすればよいですか?

Xcode 7 ベータ 1 を使用しています。

4

2 に答える 2