蘋果 SwiftUI 踢館穀歌 Flutter
作者 | 屠敏&伍杏玲
出品 | CSDN(CSDNnews)
相信大家已經瀏覽完蘋果 2019 開發者大會上幾大新發布:價格令人咂舌的新款MacPro、iPad喜提自己的 OS 系統、新版 iOS 13 秒變「黑寡婦」模式,macOS 替代 iTunes 等。在大會的壓軸環節里,蘋果宣布一個重磅消息:
蘋果全新的 UI 框架——SwiftUI 來了!
早在2017年,Google 推出了移動 UI 框架 Flutter,便於開發者在 iOS 和 Android 系統上快速構建高質量的原生用戶界面。
那麼失去先發之勢、只支持蘋果系統的 SwiftUI 具備哪些出彩的特性呢?
拖拽控制項生成代碼,所見即所得不再是夢!
據官網介紹,SwiftUI 是基於 Swift 語言,使用一組工具和 API 可在所有的蘋果平台上構建用戶界面。由於 SwiftUI 擁有易讀、自然編寫的聲明式 Swift 語法,這可與 Xcode 一起協同代碼的設計。SwiftUI 具有自動支持動態類型、暗黑模式、本地化和可訪問性的特點。
會上,蘋果公司軟體工程高級副總裁 Craig Federighi 演示了如何用 SwiftUI 將一百行代碼簡化為只有十幾行。
看起來 SwiftUI 操作簡便,那麼開發者可以所見即所得,不用寫代碼控制了嗎?一起來看看它的特性:
一、聲明性語法
SwiftUI 使用聲明性語法,開發者可以簡單地說明用戶界面應該長什麼樣的。例如,當你寫一個視圖時,可以寫一個 List,裡頭再描述每個欄位的對齊方式、字體和顏色。
這樣的代碼比以前更簡單,易於閱讀,也節省開發時間和維護成本。
這種聲明式風格也適用於複雜的功能上,如動畫。之前對於開發者來說,動畫是較頭疼的功能,即使用了 Lottie 動畫第三方庫,一位 iOS 開發者表示,用傳統 Objective-C 寫的話大概需要 10 行代碼。
通過 SwiftUI,只用幾行代碼便可輕鬆地將動畫添加到幾乎所有控制項中。
繪製動畫,圖源https://github.com/Jinxiansen/SwiftUI
在運行時,系統會創建平滑移動所需的所有步驟,甚至在中斷時,能保持App繼續穩定使用。
二、設計工具
Xcode 11自帶有設計工具,配合 SwiftUI 使用的話,可通過拖拽來構建界面。
當開發者在右邊的設計畫布區編輯時,其所有內容都與左邊的編輯器中的代碼完全同步。
代碼在鍵入時立即顯示為預覽,此時開發者對該預覽所做的任何更改都會立即顯示在代碼中。並且 Xcode 會立即重新編譯更改代碼,將其插入到應用程序的運行版本中,實時所見即所得,還可編輯。
- 拖放功能
現在開發者只需拖動畫布上的控制項,便可在用戶界面中排列組件。打開檢查器,選擇字體、顏色、對齊方式或其他的設計選項,開發者還可以使用游標重新排列控制項。
這些可視化編輯器也可以在代碼編輯器中使用,如果開發者更喜歡手動編碼界面的話,可使用檢查器為每個控制項發現新的修改器。還可以從庫中拖出控制項,直接將其拖放到設計畫布上,或直接加在代碼上。
- 動態更換功能
由於 Swift 編譯器是在 Xcode 中編輯和運行的,所以開發中的 App 會實時地構建和運行。
開發者看到的設計畫布不是與真實的用戶界面相近,它是一個實時 App。Xcode 可以直接在這個實時 App 中使用「動態替換」的方式來更換已編輯的代碼,這也是 Swift 的一個新功能。
- 預覽
開發者可以在 SwiftUI 視圖下,創建一個或多個預覽,來獲取示例的數據。還可以配置用戶幾乎可能看到的各類內容,例如大字體、本地化或「暗黑模式」。
當然,預覽可以發給任何蘋果設備,也可以在任何方向上顯示開發的 UI。
總的來說,SwiftUI 使用更少的代碼,更優的交互方式來供開發者設計 UI。
GitHub Package Registry 將支持 Swift 包
隨著 Swift 越來越廣泛的應用,6 月3 日,GitHub 宣布:GitHub Package Registry 要支持 Swift 包了!
早在5月10日,GitHub 已公布 GitHub Package Registry 的測試版,這是一種軟體包管理服務,可以輕鬆地在源代碼旁發布公共或私有軟體包。目前 GitHub Package Registry已支持有:JavaScript(npm)、Java(Maven)、Ruby(RubyGems)、.NET(NuGet)和Docker等。
這樣,Swift包可以讓開發者輕鬆地在項目和Swift社區中共享庫和源代碼。據介紹, Swift 包管理是 GitHub 上提供,用於構建、運行、測試、打包Swift代碼的跨平台工具。這個軟體包配置是用 Swift 編寫的,可以讓開發者輕鬆地配置 Target,聲明產品和管理各種依賴關係。
以後通過 Swift 包管理和 GitHub Package Registry,開發者可以更輕鬆地發布和管理 Swift 軟體包。
那麼後發兩年的 SwiftUI 和 Flutter相比,可以後來追上嗎?聲明式 UI 編程會是未來趨勢嗎?
對此,CSDN(ID:CSDNnews)採訪抖音 iOS 工程師黃文臣來給我們具體分析。
SwiftUI 硬傷:只用於蘋果生態
聲明式編程是未來
CSDN:如何評價蘋果最新發布的 SwiftUI?
黃文臣:SwiftUI 是為 iOS/macOS/tvOS 等 Apple 生態提供一套統一的UI框架。對於寫 iOS 的同學,假如去開發 macOS,就不需要再學一次 AppKit 了,降低了蘋果生態下跨平台的門檻。並且 Xcode 11 針對 SwiftUI 還提供了熱載入 和 preview,能夠大幅度提高UI開發效率。SwiftUI 提供了一種聲明式的 UI 編寫方式,結合新推出的響應式框架(Combine),iOS 生態下終於可以像 Flutter、React 那樣寫代碼了。
CSDN:從你個人角度來看,蘋果為什麼會推出 SwiftUI?和 Google 的 Flutter 做個對比?
黃文臣:iOS/iPadOS/MacOS 系統的差異會越來越大,提供了這樣一套統一的 UI,有利於開發者為蘋果生態貢獻跨平台的 App,這對於 macOS 這種 App 數量比較少的平台尤為重要。
Flutter 真正的解決了跨平台:iOS/Android/Web/Desktop,讓開發者能夠只學習一次,為多平台編寫應用。
SwiftUI 目前只是專註在蘋果生態,這是一個硬傷,不過 SwiftUI 還處在嬰兒階段,未來就看蘋果是否想要去支持其他平台了。
CSDN:在這樣的趨勢下,你覺得聲明式 UI 編程會是應用開發未來?
黃文臣:毫無疑問,聲明式編程是未來。
聲明式編程有幾個優點:
- 代碼是描述程序在做什麼,可閱讀性會大大提高;
- 組件狀態更容易維護在內部,減少副作用;
- 組件之間的邊界更明顯,從而讓組件復用更靈活。
React、Flutter 包括剛出的 SwiftUI 都選擇了聲明式的 UI,從一個側面也印證了這一點。
Swift 開發者喜大普奔
你還在用 Objective-C 嗎?
那麼對於這款神器,普通開發者怎麼看呢?
@dimmke:
我想說一聲感謝,作為一名在業務時間學習 iOS 開發的網路開發人員,我之前是用編程的方式來構建視圖。
在我看來,將 IB 生成的 UI 內容存儲在 XML 的技術,是很老土的做法。我肯定期待它應該生成和自己變成寫的相同的代碼。
但是用編程的方式來構建 UI 的代碼,這是很非常複雜。現在 SwiftUI 看起來是這麼簡單和聲明性,對於未來想成為 App 開發一員的我來說,感覺更有希望了!
@fphilipe:
對於我這個 iOS 開發者來說,這是從業來迄今為止最大的一次宣布。
雖然還沒有機會深入研究,但將 UITableViewController 與僅包含聲明性代碼的片段進行比較,SwiftUI 看起來是比較有前景的。
唯一的缺點是,假如老的 iOS 版本仍然需要支持的話,我們必須等待一兩年才能使用它,讓我們期待 iOS 13 能更快地被用起來吧。
也有知名 iOS 開發者圖拉鼎提醒道:
如果說 2014 年 Apple 發布 Swift 1.0 是一個「嘗試」的話,那麼 2019 年 Apple 發布 Swift 5.0、Swift 5.1、SwiftUI、Combine……就是一個轉折了。
2014-2019 年,開發者可以無視 Swift,繼續用 Objective-C,也沒有啥影響(其實多少開始有了)。
但是 2019 年開始,一切都不一樣了,轉折正式開啟。
總的來說,SwiftUI的推出對於開發者來說是利好的,節約開發者的時間,提高代碼的可閱讀性。但蘋果比谷歌晚了兩年才推出這UI 框架,且與跨生態的 Flutter 不同的是,蘋果帶有一貫的封閉性,只能在自己單一的生態應用里用。未來 SwiftUI 是否能追趕 Flutter 需保留大大的問號。
另外,對於仍在使用 Objective-C,不願意接受 Swift 的開發者來說,SwiftUI 從在側面上證明 Swift 的流行與未來趨勢,對於這部分開發者來說,SwiftUI 的推出是改變的機遇也是挑戰。
官網介紹:
https://developer.apple.com/xcode/swiftui/


※五大行業會古都 華為賦能全行業開發者
※百年 IBM 如何用代碼拯救生命
TAG:CSDN |