2017-08-06 7 views
1

Je construis actuellement une application iOS avec une extension d'application watchOS. J'ai certaines classes qui sont partagées entre les deux applications, et elles sont largement identiques sur les deux plates-formes, mais avec certaines variations. Je me demande comment cela est le mieux mis en œuvre. En ce moment, j'utilise les éléments suivants:Code spécifique à la plate-forme pour les classes watchOS/iOS partagées dans Swift?

#if os(watchOS) 
private var watchOSOnlyProperty: Any? 
#endif 

ou

#if os(iOS) 
func iOSOnlyMethod() { 
    ... 
} 
#endif 

Bien que cela fonctionne, il donne plusieurs problèmes depuis XCode semble être assez confus à ce sujet. L'indentation, l'auto-complétion et la liste des méthodes sont toutes un peu fausses lors de l'utilisation de cette syntaxe.

Quelle est la bonne façon de faire cela? Comment pouvez-vous ajouter des méthodes spécifiques à iOS/watchOS & aux classes partagées dans Swift?

+1

C'est la bonne façon – Paulw11

+0

Hm ... cela produit tellement de problèmes pour moi dans XCode que je le considérerais pas vraiment viable, cependant. Par exemple, l'auto-complétion a pratiquement cessé de fonctionner complètement pour moi pour les classes qui l'utilisent. Des alternatives? – BlackWolf

+0

Créez différents fichiers source pour les différentes cibles. Cela devrait fonctionner cependant. Essayez de supprimer vos données dérivées – Paulw11

Répondre

0

Code de séparation

Il y a deux façons de séparer le code

  • Utilisez #if os(...) comme vous le suggérez. Utilisez les fichiers séparés pour les cibles différentes .

achèvement automatique

XCode que le code cible pour votre saisie semi-automatique sélectionné. Xcode target selector

Si vous voulez autocomplétion pour le code à l'intérieur des blocs #if os(watchOS) alors vous devez changer votre cible actuelle (via la barre d'outils) à la cible wathOS.

0

Vous pouvez ajouter un indicateur de préprocesseur C dans la fenêtre Paramètres de construction de la cible de l'application de surveillance.

-DWATCHOS 

Puis

#ifdef WATCHOS 
// watchOS code here 
#else 
// iOS code here 
#endif 

fonctionnera.