Schnelle Benutzeroberfläche - Galoppieren durch Europa

Bild


22:35. Freude


Angezeigte WWDC 2019 Key Notes. Die erwartete deklarative Benutzeroberfläche hat sich wirklich erfüllt, und dies ist wirklich ein universelles Ereignis für die Welt der iOS-Entwicklung. "Wir müssen einen Artikel darüber schreiben", dachte ich, und Tausende weitere iOS-Entwickler auf der ganzen Welt sind begeistert.


05:30. Tutorials


Swift UI - Ein neues, von Apple entwickeltes Framework, das in Swift geschrieben wurde und die Benutzeroberfläche deklarativ im Code beschreibt.

Mir ist aufgefallen, dass Yabloko in Bezug auf die Dokumentation jedes Jahr immer cooler wird. Dieses Mal sahen sie unter Swift UI einige vollständige Tutorials mit schrittweiser Hinzufügung und interaktiver Anzeige des angezeigten Ergebnisses. Am Ende fügten sie sorgfältig Kontrollfragen hinzu, um die Ergebnisse zu konsolidieren. Nun, nur ein Märchen! Es gibt auch Links zu Beispielprojekten.



Schön!


Ich werde das Tutorial nicht auf Russisch nacherzählen, in einer so schönen Form ist es besser, es in die Originalquelle zu stecken. Ich werde meine Eindrücke und Beobachtungen über diese ganze Geschichte mit Swift UI beschreiben und mich ein wenig damit beschäftigen.


07:00 Uhr Installation


Der neue Xcode verfügt über einen neuen Code-Bearbeitungsmodus - Editor und Leinwand.



Ich habe die Leinwand nicht sofort gesehen - dafür reicht es nicht aus, Xcode 11.0 herunterzuladen, Sie müssen auch Makos auf 10.15 aktualisieren. Ohne es wird Xcode funktionieren, aber ohne die Freuden einer Leinwand und möglicherweise etwas anderes.


Ich war froh, dass bei der Auswahl des Codes auch das entsprechende Element im Canvas hervorgehoben wird.


Neue Achse, zum Beispiel gestartet. Bröckelt es? Nun ja, das tut es. Fällt die Hintergrundbeleuchtung aus? Nein, natürlich - das gleiche ist in Xcode noch nie passiert;) Aber die Zeichenfläche funktioniert und die Ansichtsänderungen werden sofort wiedergegeben, wenn dies keine Tabelle mit komplexen Zellen ist.



09:22. Neues Projekt


Beim Erstellen eines neuen Projekts ist jetzt die Option "Schnelle Benutzeroberfläche verwenden" verfügbar, und das Projekt wird mit der entsprechenden Konfiguration erstellt.



Die neue SceneDelegate Datei ist SceneDelegate , in der das Fenster und seine SceneDelegate erstellt werden. Aber in AppDelegate gibt es kein Wort über ihn. Es gibt jedoch eine neue Methode, mit der eine 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) } 

Nun, die Default Configuration selbst befindet sich in Info.plist und SceneDelegate angezeigt. Alles passte zusammen.



Aber zurück zu SceneDelegate - der Start findet darin statt.


 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 ist ein regulärer generic UIViewController , der unter dem neuen View Protokoll jede Art von Inhalt enthalten kann


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

Das View Protokoll ist obszön:


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

Das heißt, er muss nur den body implementieren.
Der Trick besteht jedoch darin, dass in diesem Ansichtsprotokoll eine ganze Menge Erweiterungen geschrieben sind, z. B. zum Aufhängen von Gesten, zum Verfolgen des Auftretens und Verschwindens einer Ansicht vom Bildschirm, für Einrückungen, Rahmen und vieles mehr. Sie können dies alles in der Dock- Ansicht | sehen Apple Developer-Dokumentation . Dies bedeutet, dass jede Ansicht, die Sie (unter dem Ansichtsprotokoll) standardmäßig erstellt haben, eine Reihe von Superkräften aller Art erhält!


ContentView.swift wir mit ContentView.swift .


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

Es ist ganz einfach: Wir erstellen eine Ansicht aus den bereits implementierten Ansichten und Steuerelementen | Apple Developer-Dokumentation . Könnte es mit verschiedenen Containern komplizierter machen. Layout und Präsentation anzeigen | Apple Developer Documentation und die Ansicht, die wir bereits selbst erstellt haben.


Layout mit Swift UI ist eine separate Geschichte, über die viel mehr Materialien geschrieben werden, und Apple hat auch ein würdiges Tutorial. Ich werde nicht weiter darauf eingehen. ContentView.swift wir zum zweiten Teil von ContentView.swift . Es gibt einen solchen Code:


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

Aus dem Namen geht hervor, dass er für das verantwortlich ist, was auf der Leinwand angezeigt wird - und er previews eine previews , in unserem Fall ContentView() .


Versuchen wir, einen Bildschirm mit einer primitiven Tabelle zu erstellen:


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

Das ist alles. Fertig. Einfach, prägnant, elegant. Hier ist der ganze Charme einer deklarativen Benutzeroberfläche!


Es ist zu sehen, dass List ein Tisch unter der Haube ist. Aber keine UITableView, sondern eine UpdateCoalesingTableView.



Und es ist auch klar, dass es kein automatisches Layout gibt. Es gibt keine Contestaint's, alles ist auf Frames, was bedeutet, dass es keine dieser komplexen Systeme mit linearen Gleichungen und einer Reihe von Berechnungen gibt. Andererseits ist das Layout anpassungsfähig und der Rahmen ist irgendwie berechnet - lassen Sie uns in zukünftigen WWDC-Sitzungen genau sehen, wie.


Schnelle Benutzeroberfläche - ist es ein Wrapper über UIKit? Ja und nein gleichzeitig, so scheint es.


Joe Groff hat Folgendes getwittert:


"Einige Entitäten sind Wrapper über UI / NS-Ansichten, aber die Tatsache, dass sie dies tun und welche Art von Ansicht sie umbrechen, kann sich ändern."

Original:
Einige Dinge umschließen UI / NS-Ansichten, aber ob sie funktionieren und welchen Ansichtstyp sie umschließen, kann sich ändern. Am besten als etwas Besonderes betrachten.


Was mir mehr aufgefallen ist:



11 Uhr Insgesamt


Leider all diese Reize


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

Das heißt, zu ihnen zu wechseln bedeutet, die alten Achsen aufzugeben, was zu radikal und für den Benutzer ohne Sorge ist.


Ich bin mir sicher, dass der Mechanismus immer noch grob ist, es wird noch viel mehr Änderungen geben und viele Fehler werden auftauchen, und das ist natürlich. Aber in ein oder zwei Jahren wird es möglich sein, es in die Produkte einzuführen.


Die schnelle Benutzeroberfläche ist eine direkte Revolution in der Welt der Menschen, die sich iOS-Entwickler nennen, und es ist cool, dass diese neue Straße, obwohl nicht ideal, eröffnet wurde.


In der Zwischenzeit hindert Sie nichts daran, dies in Ihren Haustierprojekten zu verwenden, Ihre Hand hineinzuholen und ästhetisches Vergnügen zu bekommen :)

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


All Articles