Incapable d'utiliser la classe personnalisée, dans un protocole avec @objc attribut?
Je suis en train de créer un protocole JSON chargement de la délégation, JSONLoaderDelegate
. Mon autre classe, appelée JSONLoader
, est censé pour dispatcher les événements de son délégué (qui implémente l' JSONLoaderDelegate
protocol) comme:
self?.delegate?.jsonLoaderdidEndWithError(self!, error: JSONLoaderError.LoadError)
La mise en œuvre de la JSONLoader est pas si important que cela (à mon humble avis). Cependant il me semble avoir des problèmes pour mettre en œuvre le protocole, c'est le code:
@objc protocol JSONLoaderDelegate {
optional func jsonLoaderdidBeginLoading(jsonLoader: JSONLoader)
func jsonLoaderdidEndWithError(jsonLoader: JSONLoader, error: JSONLoader.JSONLoaderError)
func jsonLoaderDidEndWithSuccess(jsonLoader: JSONLoader)
}
Cela semble assez simple pour moi, mais j'obtiens une erreur:
méthode ne peut pas être marqué @objc parce que le type du paramètre ne peut pas
être représentée en Objective-C.
souligné tous les trois fonctions.
Évidemment, si je retire la @objc
attribut je ne peux pas utiliser le optional
pour la fonction. Je tiens vraiment à garder jsonLoaderdidBeginLoading
comme option tho. Toutes les idées /méthodes pour résoudre ce problème? Merci!!!!
OriginalL'auteur Fygo | 2015-03-03
Vous devez vous connecter pour publier un commentaire.
Ce que les 3 méthodes ont en commun est le
JSONLoader
paramètre, et c'est ce que je pense ne vous empêche de combler le protocole. Afin de résoudre le problème que vous avez à faire objc compatible.Ajouter @objc sa déclaration... et de corriger toutes les choses nécessaires pour le rendre compatible (pas de génériques, par exemple). À la fin, il serait peut-être pas la bonne approche.... juste pour avoir une option func dans un protocole. C'est un compromis, et c'est à vous de lequel des 2 options est mieux (objc compatible ou non facultatif func)
Ouais, je vois que je ne peut pas faire un enum @objc compatible. Je pense que je vais juste me débarrasser de cette option alors. Eh bien... Merci pour votre aide!
Vous pouvez obtenir autour de l'enum problème en déclarant dans un fichier en-tête C et de le combler de Swift ou à l'aide de la dernière Xcode beta depuis Swift 1.2 prend en charge
@objc
pour base les énumérations: developer.apple.com/swift/blog/?id=22Merci beaucoup, check it out!
OriginalL'auteur Antonio
J'ai été confronté à ce problème que j'ai eu une classe
MyConnection
qui n'avait pas de parent de la classe.Comme cette.
Je ne peux pas mettre
@objc
avant cela, je reçois un avertissementJ'ai donc modifié la classe héritée de
NSObject
.Comme ce
OriginalL'auteur Ramaraj T
J'ai eu le même message d'erreur.
method cannot be marked @objc because the type of the parameter cannot be represented in Objective-C.
J'ai changé la syntaxe à la suite de swift 2.0. Il fonctionne très bien maintenant!
Remarque: le Concurrent de classe de type changé de NSObject qui a effacé le délégué de la violation des règles
Également dans le cas de NSJSON de l'analyse. J'ai changé à la suite.
OriginalL'auteur A.G
Est-ce un type enum? Vous ne pouvez pas convertir Swift énumérations à l'Obj-C du code. Vous aurez besoin d'utiliser un int à la place.
OriginalL'auteur Sandy Chapman