2017-06-08 3 views
8

J'ai vérifié la question relative à la façon de trouver la version actuelle de Swift par la commande swift --version, mais comment puis-je mettre à jour ma version Swift de 3.1 à 3.2? (Parce que le Xcode 9 ne supporte que Swift 4.0 & Swift 3.2)Comment mettre à jour swift de 3.1 à 3.2, mais pas à 4.0

Pour construire à la fois avec succès dans Xcode 8 & Xcode 9, il est préférable de mettre à niveau Swift 3,1 à 3,2. Mais comment?

Mon objectif était de faire en sorte que la compilation soit réussie dans Xcode 8 & Xcode 9, de sorte que publier avec Xcode 8 serait OK, et essayer la fonctionnalité de Xcode 9 est également OK. Donc, je ne vais pas mettre à jour le code pour swift 4.0 jusqu'à ce que l'édition officielle de Xcode 9.0 soit publiée.

Après mon test, je ne peux pas convertir mon code de swift 3.1 vers 3.2 par la fonction 'edit-> convert' de Xcode 8.3.3.

enter image description here

La raison pour laquelle je tente de convertir le code Swift 3.2 est que je vais obtenir erreur de « Module compilé avec Swift 3.1 ne peuvent pas être importés à Swift 4.0 » si je construis le code avec Xcode 9.

enter image description here

+3

Swift 3.2 ne sont pas inclus dans Xcode 8.3.3, donc vous ne pouvez pas convertir à Swift 3.2 dans Xcode 8.3.3. –

+0

Avez-vous essayé de nettoyer votre dossier de construction? Peut-être que ce n'est pas une chose de conversion, mais le fait que quelque chose dans le dossier de construction a été construit avec Xcode 8. – Chris

+0

Salut, Avez-vous pu le convertir? En ce moment, mon application fonctionne très bien dans xcode 8 (Swift 3). Dois-je le convertir en swift 3.2 avant de convertir en swift 4 en xcode 9? Alors, quel xcode devrais-je télécharger pour le convertir en swift 3.3? Toutes les astuces seraient vraiment utiles –

Répondre

0

de l'option Menu: Edition -> convertir -> pour Swift Current Syntaxe

étapes ci-dessus vous aider à convertir dans la syntaxe rapide actuelle.

+0

Voulez-vous dire faire cela dans XCode9? – JerryZhou

+0

Votre code est en swift 3.1 et vous voulez le convertir en 3.2, alors ouvrez xcode 8.2 et convertissez-le en 3.2 puis ouvrez xcode 9, puis convertissez-le en swift 4.0 –

+0

Merci, mais je ne vais pas convertir en swift 4.0 jusqu'à Edition officielle de Xcode 9.0 publiée. – JerryZhou

5

Swift 3.2 est une solution de pis-aller pour continuer à utiliser le code Swift 3 sous Xcode 9 sans convertir entièrement à des projets Swift 4.

La version Swift inclus dans Xcode 8.3.3 est 3.1. Convertir votre code en Swift 3.2 sous Xcode 9 ne garantit pas qu'il sera toujours compilé sous Xcode 8.

Je ne suis pas sûr que la compilation du code Swift 3.1 comme Swift 3.2 sous Xcode 9 nécessite une conversion du tout, car ils partagent tous deux la même syntaxe. Vous devrez peut-être résoudre certains appels d'API pour compenser les modifications apportées aux nouveaux SDK.

Apple a un peu plus d'informations ici:

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Compatibility.html

(mis à jour)

En ce qui concerne votre dernière image, si vous avez le code source pour le module Runes, vous aurez pour le recompiler sous Xcode 9. Cela fera usage de Swift 3.2 et permettre son importation dans Swift 4.

+0

Bon point, je ferai attention avec ça. – JerryZhou

+0

Après le test, je ne peux pas convertir de 3.1 à 3.2. si triste. – JerryZhou

1

Vous n'avez pas besoin de le convertir.

Swift 3.2 n'est pas une version actuelle. C'est ainsi que Xcode 9 (et le compilateur Swift 4) appelle Swift 3. (Je devine de me différencier de Swift 3 construit avec Xcode 8).

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Compatibility.html

+0

Oui, mais la chose étrange est si je construis avec Xcode 9, il me montrera l'erreur de "Module compilé avec Swift 3.1 ne peut pas être importé dans Swift 4.0" – JerryZhou

2

modules dépendance/cadres en rapide doivent être recompiler w/xcode9 depuis rapide ne sont pas ABI compatible/ stable. Si vous avez inclus des dépendances en utilisant des systèmes de distribution de paquets tels que carthage ou cosses de cacao, les modules seront recompilés w/xcode9 et vous ne devriez pas voir ce problème.Si vous liez des paquets intégrés distribués au format binaire, vous pouvez exécuter dans la question

+0

Oui, je comprends votre point de vue. Je me demande simplement si je peux vraiment construire toutes choses avec swift 3.2, alors je devrais être capable d'exécuter le code à la fois avec Xcode 8 et 9 sans les reconstruire. Droite? Sinon, il a été difficile de travailler à la fois migrer et soutenir le plan de sortie d'origine par commutateur Xcode8 & 9 fréquemment. – JerryZhou

2

Vous pouvez essayer ceci:

  • Build Settings -> Swift Langauge Version -> Swift 3.2.

enter image description here

  • Edition -> Convertir -> Pour Swift Current Syntaxe.

A pris note: ces étapes en utilisant Xcode 9

+0

Je pense que j'ai déjà essayé cela. Mais ne travaille pas comme souvenir. Mais je peux réessayer plus tard. – JerryZhou