У меня есть Game
класс. Я сделал его универсальным, потому что мне нужно было поддерживать различные типы плат. Теперь я просто хочу добавить классический делегат в стиле iOS с методом, который будет принимать игру и новое значение очков в качестве параметров. Как добиться этого способом Swift associatedtype
? Я действительно смущен тем, что не могу реализовать такую простую логику.
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?
}
game
? - person Qbyte   schedule 03.12.2017var pointsDelegate
типаGamePointsDelegate
, потому чтоGamePointsDelegate
не является типом. Это как шаблон для типа, который создает новый тип для каждого возможного значенияB
. - person Alexander   schedule 03.12.2017B
вGame
, и я хочу как-то это использовать. - person kelin   schedule 03.12.2017GamePointsDelegate
, тоGame
нужен новый общий параметр, назовите егоDelegate
, типаGamePointsDelegate
, гдеSelf.Delegate.B
==Self.B
. - person Alexander   schedule 03.12.2017