Swift UI - galoper à travers l'Europe

image


22:35. Plaisir


Vu les notes clés de la WWDC 2019. L'interface utilisateur déclarative attendue est vraiment devenue réalité, et c'est vraiment un événement universel pour le monde du développement iOS. «Nous devons écrire un article à ce sujet», ai-je pensé, et des milliers d'autres développeurs iOS à travers le monde sont en exaltation.


05h30. Tutoriels


Swift UI - Un nouveau cadre développé par Apple, écrit en Swift, conçu pour décrire déclarativement l'interface utilisateur dans le code.

J'ai remarqué que chaque année en termes de documentation, Yabloko devient de plus en plus cool. Cette fois, sous Swift UI, ils ont vu quelques tutoriels complets avec ajout étape par étape et affichage interactif du résultat affiché, et à la fin, ils ont soigneusement ajouté des questions de contrôle pour consolider les résultats. Eh bien, juste un conte de fées! Il existe également des liens vers des exemples de projets.



Sympa!


Je ne reviendrai pas sur le tutoriel en russe, sous une si belle forme il vaut mieux le piquer dans la source d'origine. Je vais décrire mes impressions et mes observations sur toute cette histoire avec Swift UI et me livrer un peu à elle.


07h00 L'installation


Le nouveau Xcode a un nouveau mode d'édition de code - Editor And Canvas.



Je n'ai pas vu la toile à la fois - pour cela, il ne suffit pas de télécharger Xcode 11.0, vous devez également mettre à jour Makos vers 10.15. Sans lui, Xcode fonctionnera, mais sans les délices d'une toile et, éventuellement, d'autre chose.


J'étais content que lorsque vous sélectionnez le code, l'élément correspondant dans le canevas soit également mis en surbrillance.


Nouvel axe, par exemple lancé. Est-ce qu'il s'effrite? Eh bien, oui. Le rétroéclairage tombe-t-il? Non, bien sûr - la même chose ne s'est jamais produite dans Xcode;) Mais le canevas fonctionne, et les changements de vue sont reflétés instantanément, si ce n'est pas un tableau avec des cellules complexes.



09:22. Nouveau projet


Lors de la création d'un nouveau projet, l'option Use Swift UI est désormais disponible et le projet est créé avec la configuration appropriée.



Le nouveau fichier SceneDelegate est SceneDelegate , dans lequel la fenêtre et sa vue racine sont créées. Mais dans AppDelegate , il n'y a pas un mot sur lui. Mais il existe une nouvelle méthode qui crée une UISceneConfiguration :


 func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { // Called when a new scene session is being created. // Use this method to select a configuration to create the new scene with. return UISceneConfiguration(name: «Default Configuration», sessionRole: connectingSceneSession.role) } 

Eh bien, la Default Configuration elle-même est dans Info.plist et SceneDelegate indiqué. Tout s'est mis en place.



Mais revenons à SceneDelegate - le lancement y a lieu.


 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). // Use a UIHostingController as window root view controller let window = UIWindow(frame: UIScreen.main.bounds) window.rootViewController = UIHostingController(rootView: ContentView()) self.window = window window.makeKeyAndVisible() } 

UIHostingController est un generic UIViewController qui peut avoir tout type de contenu sous le nouveau protocole View


 open class UIHostingController<Content> : UIViewController where Content : View { /// } 

Le protocole View est obscène:


 public protocol View : _View { associatedtype Body : View var body: Self.Body { get } } 

Autrement dit, il a seulement besoin de mettre en œuvre le body .
Mais l'astuce est qu'une tonne d'extensions sont écrites sur ce protocole View , par exemple, pour suspendre les gestes, pour suivre l'apparence et la disparition d'une vue de l'écran, pour les retraits, les cadres et bien plus encore. Vous pouvez voir tout cela dans le dock Voir | Documentation développeur Apple . Cela signifie que toute vue que vous avez créée (sous le protocole View ) hors de la boîte obtient un tas de toutes sortes de super-pouvoirs!


Passons à ContentView.swift .


 struct ContentView : View { var body: some View { Text(«Hello World») } } 

C'est simple: nous créons une vue à partir des vues et commandes déjà implémentées | Documentation développeur Apple . Pourrait le rendre plus compliqué en utilisant divers conteneurs Voir la présentation et la présentation | Apple Developer Documentation et la vue que nous avons déjà créée nous-mêmes


La mise en page avec Swift UI est une histoire distincte sur laquelle de nombreux autres documents seront écrits, et Apple a également un tutoriel digne. Je ne m'y attarderai pas. Revenons à la deuxième partie de ContentView.swift , il existe un tel code:


 #if DEBUG struct ContentView_Previews : PreviewProvider { static var previews: some View { ContentView() } } #endif 

Il est évident d'après le nom que c'est lui qui est responsable de ce qui est affiché dans le canevas - et il affichera des previews , dans notre cas ContentView() .


Essayons de créer un écran avec une table primitive:


 struct ContentView : View { var birds: [Birds] = [] var body: some View { List(birds) { bird in Text(verbatim: bird.name) } } } 

C’est tout. C'est fait. Simple, concis, élégant. Ici, c'est tout le charme d'une interface utilisateur déclarative!


On peut voir que List est une table sous le capot. Mais pas un UITableView, mais certains UpdateCoalesingTableView.



Et il est également clair qu'il n'y a pas de mise en page automatique. Il n'y a pas de contestation, tout est sur des trames, ce qui signifie qu'il n'y a pas ces systèmes complexes avec des équations linéaires et un tas de calculs. Mais, d'autre part, la mise en page est adaptative et le cadre est en quelque sorte calculé - voyons exactement dans les futures sessions de la WWDC comment.


Swift UI - est-ce un wrapper sur UIKit? Oui et non en même temps, semble-t-il.


Joe Groff a tweeté ce qui suit:


"Certaines entités sont des wrappers sur les vues UI / NS, mais le fait qu'elles le fassent et le type de vue qu'elles enveloppent est une chose qui peut changer."

Original:
Certaines choses encapsulent les vues UI / NS, mais leur fonctionnement et le type de vue qu'ils encapsulent sont susceptibles de changer. Mieux vaut y penser comme une chose distincte.


Ce que j'ai remarqué le plus:



11 h 00 Total


Hélas, tous ces charmes


 @available (iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *) 

Autrement dit, passer à eux, c'est abandonner les anciens axes, ce qui est trop radical et sans souci pour l'utilisateur.


Je suis sûr que le mécanisme est encore brut, il y aura beaucoup plus de changements, et beaucoup de bugs apparaîtront, et c'est naturel. Mais dans un an ou deux, il sera possible de l'implémenter dans le produit.


Swift UI est une révolution directe dans le monde des gens qui se disent développeurs iOS, et c'est cool que cette nouvelle route, bien que pas idéale, ait ouvert.


En attendant, rien ne vous empêche de l'utiliser dans vos projets pour animaux de compagnie, de mettre la main à la pâte et d'obtenir un plaisir esthétique :)

Source: https://habr.com/ru/post/fr454750/


All Articles