Ich habe eine Game
Klasse. Ich habe es generisch gemacht, weil ich verschiedene Arten von Boards unterstützen musste. Jetzt möchte ich nur einen klassischen iOS-Stil-Delegaten mit einer Methode hinzufügen, die ein Spiel und einen neuen Punktewert als Parameter annehmen wird. Wie erreicht man dies in der Swift associatedtype
Art und Weise? Ich habe wirklich verwirrt, dass ich solche einfache Logik nicht vorantreiben kann.Verwenden von zugeordneten Typ in einem Delegate-Protokoll für einen generischen Typ
protocol GamePointsDelegate {
associatedtype B: Board
func game(_ game: Game<B>, didSetPoints points: Int)
}
class Game<B: Board> {
let board: Board
var points = 0 {
// Compiler Error
// Member 'game' cannot be used on value of protocol type 'GamePointsDelegate'; use a generic constraint instead
didSet { pointsDelegate?.game(self, didSetPoints: points) }
}
// Compiler Error
// Protocol 'GamePointsDelegate' can only be used as a generic constraint because it has Self or associated type requirements
var pointsDelegate: GamePointsDelegate?
}
Wäre es möglich, den zugehörigen Typ zu entfernen und nur eine generische Funktion 'Spiel' zu verwenden? – Qbyte
Sie können kein 'var pointsDelegate' vom Typ' GamePointsDelegate' haben, weil 'GamePointsDelegate' kein Typ ist. Es ist wie eine Vorlage für einen Typ, der für jeden möglichen Wert von "B" einen neuen Typ erzeugt. – Alexander
@Alexander, ich verstehe. Aber ich habe bereits 'B' in' Game' und ich möchte das irgendwie benutzen. – kelin