protocol Car {
static func foo()
}
struct Truck : Car {
}
extension Car {
static func foo() {
print("bar")
}
}
Car.foo() // Does not work
// Error: Car does not have a member named foo
Truck.foo() // Works
Xcode compila automaticamente il Car.foo()
correttamente, quindi quello che sto chiedendo è se è un bug che non viene compilato (dice che non ha un membro chiamato foo()). Potresti chiamare i metodi statici direttamente sul protocollo se sono definiti in un'estensione di protocollo?Come chiamare metodi statici su un protocollo se sono definiti in un'estensione di protocollo?
L'auto non è un oggetto quindi non è possibile inviarlo alcun messaggio. – matt
Mi sembra un insetto. Poiché l'implementazione predefinita associa direttamente la funzionalità effettiva al protocollo, dovrebbe essere richiamabile sul protocollo stesso. – hennes
@hennes "l'implementazione predefinita associa la funzionalità effettiva direttamente al protocollo" non è una vera affermazione. L'implementazione predefinita associa funzionalità a classi e strutture conformi al protocollo. Ci sono [ragioni] (https://en.wikipedia.org/wiki/Multiple_inheritance#The_diamond_problem) i protocolli non hanno implementazioni. –