Vorrei nido un protocollo nella mia classe per implementare il modello di delegato in questo modo:Swift protocollo annidato in una classe
class MyViewController : UIViewController {
protocol Delegate {
func eventHappened()
}
var delegate:MyViewController.Delegate?
private func myFunc() {
delegate?.eventHappened()
}
}
Ma il compilatore non lo permetterà:
dichiarazione è valido solo per lo scope del file
Posso farlo funzionare facilmente dichiarando MyViewControllerDelegate
al di fuori dell'ambito della classe.
La mia domanda è perché una tale limitazione?
I protocolli delegati devono essere implementati dagli utenti di questa classe. Quello che stai descrivendo come un problema non è un problema, è un modello di progettazione software essenziale utilizzato nelle strutture Cocoa e CocoaTouch di Apple. –
È possibile ottenere una panoramica completa di come i delegati devono essere utilizzati in Cocoa _ (e per estensione, Objective-C & Swift, poiché il primo è stato progettato in tandem con Cocoa e quest'ultimo principalmente per le app Cocoa) _ in Apple [ Guida alle competenze di Cocoa Core, sezione Delega] (https://developer.apple.com/library/content/documentation/General/Conceptual/DevPedia-CocoaCore/Delegation.html#//apple_ref/doc/uid/TP40008195-CH14-SW1). –