Sto provando a creare un protocollo per la delega di caricamento JSON, JSONLoaderDelegate
. altra mia classe, denominata JSONLoader
, si suppone di inviare gli eventi a suo delegato (che implementa il protocollo JSONLoaderDelegate
) come:Impossibile utilizzare la classe personalizzata in un protocollo con l'attributo @objc?
self?.delegate?.jsonLoaderdidEndWithError(self!, error: JSONLoaderError.LoadError)
L'attuazione del JSONLoader non è così importante (imho). Tuttavia mi sembra di avere problemi per l'attuazione del protocollo, questo è il codice:
@objc protocol JSONLoaderDelegate {
optional func jsonLoaderdidBeginLoading(jsonLoader: JSONLoader)
func jsonLoaderdidEndWithError(jsonLoader: JSONLoader, error: JSONLoader.JSONLoaderError)
func jsonLoaderDidEndWithSuccess(jsonLoader: JSONLoader)
}
Questo sembra abbastanza semplice per me, ma sto ottenendo un errore:
method cannot be marked @objc because the type of the parameter cannot be represented in Objective-C.
puntato tutte le tre funzioni.
Ovviamente, se rimuovo l'attributo @objc
, non è possibile utilizzare lo optional
per la funzione. Mi piacerebbe davvero mantenere jsonLoaderdidBeginLoading
come opzionale tho. Qualche idea/modo per risolvere questo? Grazie!
Sì, la tua ipotesi è corretta, o almeno è così che la vedo io. Tuttavia, come posso renderlo compatibile objc? Devo semplicemente aggiungere "@objc" davanti a "class JSONLoader"? – Fygo
Aggiungi @objc alla sua dichiarazione ... e correggi tutte le cose necessarie per renderlo compatibile (no generici, per esempio). Alla fine potrebbe essere l'approccio sbagliato .... solo per avere una funzione opzionale in un protocollo. È un compromesso, e spetta a te quale delle 2 opzioni è migliore (compatibile objc o nessuna funzione opzionale) – Antonio
Sì, vedo che non riesco a rendere un enum compatibile @objc. Immagino che mi libererò di quell'opzionale allora. Oh bene ... Grazie per il tuo aiuto! – Fygo