Xcode 8 Avertissement “de la méthode d'Instance correspond presque à condition facultative”
J'ai converti mon (macOS) projet de Swift 3 dans Xcode 8 et je reçois les mises en garde suivantes avec plusieurs délégué méthodes que j'en œuvre rapide des classes:
Instance method 'someMethod' nearly matches optional requirement of protocol 'protocolName'
- Je obtenir ce pour plusieurs NSApplicationDelegate méthodes comme applicationDidFinishLaunching
et applicationDidBecomeActive
:
Mais aussi pour les implémentations de tableViewSelectionDidChange
:
J'ai utilisé la complétion de code pour insérer les signatures de méthode et j'ai aussi essayé de les copier dans le kit de développement-en-têtes pour écarter les fautes de frappe. Les mises en garde il suffit de ne pas disparaître et les méthodes ne sont jamais appelés.
Ce qui me manque ici?
- Simplement changer
NSNotification
àNotification
pour la première méthode, bien que votretableViewSelectionDidChange
mise en œuvre compile très bien pour moi (attention, gratuit). Peut-être essayer le nettoyage de votre dossier de création? - Commutation de
Notification
a eu aucun effet (j'ai ajusté la capture d'écran de la question en conséquence). J'ai aussi fait un nettoyage et supprimé les Données Dérivées du dossier. - J'ai eu cette erreur avec le code qui a été copier-collé à partir d'Apple de développement iOS avec Swift tutoriel. Dans mon cas, cette info a été ce qui m'a sauvé: aplus.rs/2016/... I. e., tapez la touche func nom manuellement et laissez intellisense fournir le courant de paramètres corrects.
Vous devez vous connecter pour publier un commentaire.
Nous avons contacté Apple Developer Support Technique (DTS) avec cette question.
Ils m'ont répondu que c'est un bug dans Xcode 8.
Nous avons soumis un rapport de bogue et d'espoir pour une mise à jour rapide. (Bug Apple ID de Rapport: 28315920).
Si vous rencontrez ce genre de problème, veuillez également remplir un rapport de bogue (en se référant à la nôtre) de sorte que les ingénieurs de chez Apple voir son pas un cas unique.
Mise à jour de Xcode ≥ 8.1
Le problème semble corrigé, au moins pour le délégué des méthodes que nous utilisons dans notre projet.
func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning?
public
. stackoverflow.com/a/54470346/749786Après des heures de recherche j'ai trouvé ce - Swift 3 ObjC Protocole Facultatif Méthode n'est Pas Appelée dans la sous-classe
Vous pouvez contourner le bug, en préfixant l'objective-c de la déclaration sur la fonction
Une raison quelconque, vous pouvez obtenir cette erreur a à faire avec la méthode des modificateurs d'accès. Par exemple, si vous n'avez pas de définir la fonction publique. Donc pour des méthodes de CLLocationManagerDelegate cas, la modification:
à:
(c'est à dire faire de la méthode public) se débarrasse de l'avertissement et de la méthode appelée comme prévu. Notez que la saisie semi-automatique n'a pas mis le public modificateur d'accès sur la méthode.
public
afin de "voir" la swift méthode de la mise en œuvre.Une autre cause de cet avertissement lorsque
NSError
est en train d'être comblé à Swift:Compte tenu de cet Objectif-C méthode du délégué:
Qui génère automatiquement cette Swift méthode:
L'avertissement a été montré.
Dans mon cas, la raison en était que les élèves de ma classe avait son propre
Error
, de façon à ce que la signature a été la résolution deMyClass.Error
plutôt queSwift.Error
. La solution a été pleinement type de l'Erreur de paramètre en modifiant àSwift.Error
:Pour l'enregistrement, j'ai eu le même problème lors de la mise en œuvre de WKWebView de didFailProvisionalNavigation délégué de la méthode. La solution a été d'ajouter de l' @objc déclaration et changer le type du dernier paramètre de l'Erreur de NSError:
Voici ce qu'il fixe pour moi.
Je recevais le message d'avertissement dans le code que j'étais sûr que j'ai tapé dans l'éditeur d'abord permis de saisie semi-automatique. J'ai par la suite retourné et re-visted l'avertissement et essayé à la même fonction de recommencer juste après ma fonction existante. Lorsque j'ai entré le nom de la fonction encore plus de ma fonction de modification de la signature et de la parms correspondait exactement à ce que Xcode prévu, et que l'avertissement a été supprimée.
Donc, si vous voulez faire un rapide test de cohérence, ne vous une faveur et essayer de taper dans la fonction une fois de plus et de voir si le parm types de changement. Qui peut être tout ce dont vous avez besoin.
Simplement pour ajouter des précisions à ce lieu plus compliqué solution de contournement: tout le monde peut voir pourquoi ci-dessous n'est pas de tir/de travail lorsque les mesures sont prises?
@ objc
n'ont pas de travail. Je suis en attente pour Apple pour le fixer...Pour xcode 8.1 >= et swift 3,
ajouter @nonobjc au début de la méthode pour faire taire cet avertissement.