
22:35。 欢欣鼓舞
查看了WWDC 2019关键说明。 预期的声明性UI确实实现了,这对于iOS开发界来说确实是一个普遍事件。 我想:“我们需要写一篇有关此的文章。”全世界有成千上万的iOS开发人员正在兴高采烈。
05:30 讲解
Swift UI-Apple开发的用Swift编写的新框架,旨在用代码声明性地描述UI。
我注意到,每年在文档方面,Yabloko都在变得越来越酷。 这次,在Swift UI下,他们看到了一些完整的教程,其中包含逐步添加和在结果上交互式显示结果的视图,最后,他们仔细地添加了控制问题以合并结果。 好吧,只是一个童话! 也有到示例项目的链接。

真好!
我不会用俄语复述该教程,因为它采用的是漂亮的形式,最好在原始资料中注明。 我将通过Swift UI以及其中的一些内容描述我对整个故事的印象和观察。
上午07:00 安装方式
新的Xcode具有新的代码编辑模式-编辑器和画布。

我没有立即看到画布-为此,不足以下载Xcode 11.0,您还需要将Makos更新到10.15。 没有它,Xcode就可以工作,但没有画布的乐趣,甚至可能没有其他乐趣。
我很高兴当您选择代码时,画布中的相应元素也会突出显示。
例如,新轴已启动。 崩溃了吗? 好吧,是的。 背光灯会掉光吗? 不,当然-在Xcode中从未发生过这种情况;)但是画布可以工作,并且如果这不是具有复杂单元格的表,则视图更改会立即反映出来。

09:22。 新项目
创建新项目时,“使用Swift UI”选项现在可用,并且使用适当的配置创建了项目。

新的SceneDelegate
文件SceneDelegate
,在其中创建了窗口及其根视图。 但是在AppDelegate
,没有关于他的任何消息。 但是,有一个新方法可以创建UISceneConfiguration
:
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
好吧, Default Configuration
本身在Info.plist
并在SceneDelegate
指示SceneDelegate
。 一切都准备就绪。

但是回到SceneDelegate
启动在其中进行。
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
UIHostingController
是常规的generic UIViewController
,在新的View
协议下可以具有任何类型的内容
open class UIHostingController<Content> : UIViewController where Content : View { /// }
View
协议是淫秽的:
public protocol View : _View { associatedtype Body : View var body: Self.Body { get } }
也就是说,他只需要实现body
。
但是诀窍在于,在此View
协议上编写了大量扩展,例如用于悬挂手势,跟踪屏幕上视图的出现和消失,缩进,框架等等。 您可以在Dock中查看所有这些内容。 Apple开发人员文档 。 这意味着您开箱即用(根据View
协议)创建的任何视图都将获得各种超级功能!
让我们ContentView.swift
到ContentView.swift
。
struct ContentView : View { var body: some View { Text(«Hello World») } }
很简单:我们从已经实现的视图和控件|视图创建一个视图。 Apple开发人员文档 。 可以使用各种容器使其变得更加复杂。 Apple Developer Documentation和我们已经创建的视图。
使用Swift UI进行布局是一个单独的故事,有关它将编写更多材料,Apple也有一个值得学习的教程。 我不会再赘述了。 让我们回到ContentView.swift
的第二部分,有这样的代码:
#if DEBUG struct ContentView_Previews : PreviewProvider { static var previews: some View { ContentView() } } #endif
从名称中可以明显看出,是他负责画布中显示的内容-并且他previews
显示previews
,在我们的示例中为ContentView()
。
让我们尝试用原始表创建一个屏幕:
struct ContentView : View { var birds: [Birds] = [] var body: some View { List(birds) { bird in Text(verbatim: bird.name) } } }
仅此而已。 做完了 简单,简洁,优雅。 这就是声明性UI的全部魅力!
可以看出, List
是一个隐藏的表。 但不是UITableView,而是一些UpdateCoalesingTableView。

而且很明显,没有自动布局。 没有约束,一切都在框架上,这意味着不存在具有线性方程和大量计算的复杂系统。 但是,另一方面,布局是自适应的,并且框架是以某种方式计算的-让我们在以后的WWDC会话中确切地了解如何。
Swift UI-是UIKit的包装吗? 似乎同时是,不是。
Joe Groff发表了以下推文:
“某些实体是UI / NS视图的包装器,但是它们执行此操作以及包装哪种视图这一事实可以改变。”
原件:
有些东西会包装UI / NS视图,但是它们是否会包装以及它们包装的视图类型可能会发生变化。 最好将其视为独特的事物。
我注意到的更多:
上午11点 合计
these,所有这些魅力
@available (iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
也就是说,切换到它们就是放弃旧的轴,这太激进了,用户不必担心。
我确信该机制仍然很粗糙,还会有更多更改,并且会弹出很多错误,这是自然的。 但是在一两年之内就可以将其引入产品中。
Swift UI是人们自称为iOS开发人员的世界的一次直接革命,这条新路虽然不理想,却开了,这很酷。
同时,没有什么可以阻止您在宠物项目中使用它,亲身体验并获得美感:)