UI rápida - galopando pela Europa

imagem


22:35. Delícia


Visualizar as principais notas da WWDC 2019. A UI declarativa esperada realmente se tornou realidade, e este é realmente um evento universal para o mundo do desenvolvimento do iOS. "Precisamos escrever um artigo sobre isso", pensei, e milhares de outros desenvolvedores de iOS em todo o mundo estão exaltados.


05:30. Tutoriais


Interface do usuário Swift - Uma nova estrutura desenvolvida pela Apple, escrita em Swift, projetada para descrever declarativamente a interface do usuário no código.

Percebi que todo ano em termos de documentação, Yabloko está ficando cada vez mais frio. Dessa vez, na interface do usuário do Swift, eles viram alguns tutoriais completos com adição passo a passo e exibição interativa do resultado à vista e, no final, adicionaram cuidadosamente perguntas de controle para consolidar os resultados. Bem, apenas um conto de fadas! Há também links para exemplos de projetos.



Nice!


Não vou recontar o tutorial em russo; de uma forma tão bonita, é melhor cutucá-lo na fonte original. Descreverei minhas impressões e observações sobre toda a história com a interface do usuário do Swift e um pouco de prazer.


07:00 Instalação


O novo Xcode possui um novo modo de edição de código - Editor And Canvas.



Eu não vi a tela de uma só vez - para isso, não basta baixar o Xcode 11.0, você também precisa atualizar o Makos para 10.15. Sem ele, o Xcode funcionará, mas sem as delícias de uma tela e, possivelmente, outra coisa.


Fiquei feliz que, quando você seleciona o código, o elemento correspondente na tela também é destacado.


Novo eixo, já lançado. Crashes? Bem, sim. A luz de fundo diminui? Não, é claro - o mesmo nunca aconteceu no Xcode;) Mas a tela funciona e as alterações na exibição são refletidas instantaneamente, se não for uma tabela com células complexas.



09:22. Novo projeto


Ao criar um novo projeto, a opção Usar interface do usuário Swift agora está disponível e o projeto é criado com a configuração apropriada.



O novo arquivo SceneDelegate é SceneDelegate , no qual a janela e sua visualização raiz são criadas. Mas no AppDelegate , não há uma palavra sobre ele. Mas há um novo método que cria um 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) } 

Bem, a própria Default Configuration está em Info.plist e SceneDelegate indicado lá. Tudo se encaixou.



Mas voltando ao SceneDelegate - o lançamento ocorre nele.


 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 é um generic UIViewController regular que pode ter qualquer tipo de conteúdo sob o novo protocolo View


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

O protocolo View é obsceno:


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

Ou seja, ele só precisa implementar o body .
Mas o truque é que uma tonelada de extensões é escrita neste protocolo de View , por exemplo, para gestos suspensos, para rastrear a aparência e o desaparecimento de uma exibição da tela, para indentações, quadros e muito, muito mais. Você pode ver tudo isso no dock Ver | Documentação do desenvolvedor da Apple . Isso significa que qualquer visualização que você criou (sob o protocolo View ) recebe uma série de todos os tipos de superpotências!


Vamos para ContentView.swift .


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

É simples: criamos uma visualização a partir das Views e Controles já implementados | Documentação do desenvolvedor da Apple . Poderia tornar mais complicado o uso de vários contêineres Exibir layout e apresentação | Documentação do desenvolvedor da Apple e a visão que já criamos.


O layout com a Swift UI é uma história separada sobre a qual muitos outros materiais serão escritos, e a Apple também possui um tutorial digno. Eu não vou insistir nisso. Vamos voltar à segunda parte do ContentView.swift , existe um código:


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

Obviamente, pelo nome, é ele quem é responsável pelo que é exibido na tela - e ele exibirá previews , no nosso caso ContentView() .


Vamos tentar criar uma tela com uma tabela primitiva:


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

Só isso. Feito. Simples, conciso, elegante. Aqui está todo o charme de uma interface de usuário declarativa!


Pode-se ver que List é uma tabela sob o capô. Mas não um UITableView, mas alguns UpdateCoalesingTableView.



E também está claro que não há layout automático. Não há restrições, tudo está em molduras, o que significa que não existem sistemas complexos com equações lineares e vários cálculos. Mas, por outro lado, o layout é adaptável e o quadro é calculado de alguma forma - vamos ver nas próximas sessões da WWDC exatamente como.


Interface do usuário Swift - é um invólucro sobre o UIKit? Sim e não ao mesmo tempo, parece.


Joe Groff twittou o seguinte:


"Algumas entidades são invólucros sobre as visualizações UI / NS, mas o fato de fazerem isso e que tipo de visão envolvem é algo que pode mudar".

Original:
Algumas coisas envolvem as visualizações de interface do usuário / NS, mas se o fazem, e que tipo de visualização elas estão sujeitas a alterações. Melhor pensar nisso como uma coisa distinta.


O que eu notei mais:



11h Total


Infelizmente, todos esses encantos


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

Ou seja, mudar para eles é abandonar os eixos antigos, que são muito radicais e sem preocupação com o usuário.


Estou certo de que o mecanismo ainda é bruto, haverá muito mais alterações e muitos bugs aparecerão, e isso é natural. Mas em um ano ou dois será possível introduzi-lo nos produtos.


A Swift UI é uma revolução direta no mundo das pessoas que se autodenominam desenvolvedores de iOS, e é legal que essa nova estrada, embora não seja ideal, tenha sido aberta.


Enquanto isso, nada impede que você use isso em seus projetos de animais de estimação, colocando a mão na mão e obtendo prazer estético :)

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


All Articles