¿Por qué necesitamos un genérico aquí? ¿No es suficiente el protocolo?

Encontré el siguiente ejemplo en la web sobre el uso de genéricos junto con protocolos, sin embargo, no entiendo por qué necesitamos genéricos, cuando todo lo que necesitamos es usar un protocolo.

Definimos un protocolo:

protocol Healthy {
    mutating func setAlive(status: Bool)
    var health: Int { get }
}

Y luego una función usando un protocolo genérico adotping ese

func check<T:Healthy>(inout object: T) {
    if (object.health <= 0) {
        object.setAlive(false)
    }
}

He cambiado el código como se muestra a continuación y todo sigue bien.

func check( object: inout Healthy) {
    if (object.health <= 0) {
        object.setAlive(status: false)
    }
}

¿O no?

La única razón por la que podría pensar en usar un genérico allí, si es un protocolo tiene un tipo asociado y no puede usarse como una instancia.

Respuestas a la pregunta(2)

Su respuesta a la pregunta