在 2019 年时,Apple 推出了两套强大的框架分别是 SwiftUI 以及 Combine,而这两种全新的框架对於开发者来说是一个重大的改动,它也跟以往iOS 开发者熟悉的开发方式不同
SwiftUI 是用来替换原IOS 的UIKit 和macOS 的APPKit 的UI 框架,特性是声明式的程序设计
Combine 为Apple 新推出的 FRP (Functional Reactive Programming ,函数式响应式程序设计) 框架,为应用程序处理事件提供了一种声明性的方法,将在之後做详细介绍
以下我们就来建立SwiftUI 的专案
首先我们在Xcode 新建专案,并选择SwiftUI 作为Interface,Life Cycle 这边先选UIKit App Delegate,如下图
新建完成後,我们一样来看一下它自动产生的档案,来跟前面的UIKit 专案比较,发现Main.storyboard 不见了!
我们来看看SceneDelegate
,正如我们之前讨论的,SceneDelegate 负责设置您应用中的场景,以及设置首个页面,而scene(_:willConnectTo:options:)
在SwiftUI 时改为如下:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// Create the SwiftUI view that provides the window contents.
let contentView = ContentView()
// Use a UIHostingController as window root view controller.
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: contentView)
self.window = window
window.makeKeyAndVisible()
}
}
上面的这段修改做了什麽呢?
scene(_:willConnectTo:options:)
函数方法。它提供了一个scene
物件(和一个session
)。其中UIScene 的实例化物件scene
实际上是UIWindowScene
类型的物件,而这个UIWindowScene
物件是由应用程序创建的window
属性会在这里用到。应用程序仍然使用UIWindow
物件,但现在它们已成为 scene(场景)的一部分。在if let
代码块中可以清楚看到如何使用scene
来初始化UIWindow
物件UIHostingController
将其添加为根视图控制器rootViewController。该控制器用於将基於SwiftUI 的视图显示在画面上window
的rootViewController,将window
实例分配给了场景的window
属性,并且设置窗口makeKeyAndVisible
为true,即将该窗口置於App的前面以上动作也就是当scene(_:willConnectTo:options:)
被调用时,SceneDelegate会在正确的时间配置场景,在scene(_:willConnectTo:options :)
函数内,会创建一个SwiftUI 视图(ContentView
),将其放置在UIHostingController
控制器中,然後将控制器分配给窗口的根视图控制器,并将该窗口放置在应用程序UI 前面,接下来就可以去看ContentView
来设计画面了
在 Day02 时有提到,电子纸萤幕设备上的 UI 设计原则是减少画面的重绘。我们可以看到上面图中...
之前有提到EyeJack可以拿来做明信片,但EyeJack除了可以做明信片外,也很适合用来写日记,只...
铁人赛学习纪录来到了第28天,今天想来做点轻松的,决定用python做一只会飞的小鸟 首先大概设计一...
今天终於来到SQL的进阶篇!想要更加灵活的使用SQL,就必须要知道子查询的用法,今天就让我们来认识所...
在上一章Todolist with React (2),完成所有样式设定後,现在就让我们在 Rea...