百行代碼變十行,蘋果SwiftUI可視化編程讓開發(fā)者感嘆完美(apple swift 編程)
蘋果開發(fā)者大會 WWDC 2019 在北京時間今天凌晨開幕。在這場大會上除了「史上最難看 Mac 主機」、首次出現(xiàn)的 iPadOS 以外,我們還終于可以對飽受詬病的iTunes 說再見了。而對于開發(fā)者來說,新發(fā)布的 SwiftUI 可能是最吸引人的特性,在 Craig Federighi 的演示中,我們可以輕松地把一百行的前端代碼縮減到十幾行。
Swift 是蘋果于 2014 年發(fā)布的全新開發(fā)語言,可與 Objective-C* 共同運行于 macOS 和 iOS 平臺,用于搭建基于蘋果平臺的應(yīng)用程序。Swift 的設(shè)計以安全為出發(fā)點,以避免各種常見的編程錯誤類別。近年來,這種編程語言的熱度上升很快,甚至有人呼吁用它來代替 Python,作為 TensorFlow 支持的語言。
「取代 Python」并不只是說說而已。今年 4 月,谷歌在 GitHub 上開放了 Swift for TensorFlow 項目。
既然 Swift 語言已經(jīng)這么有潛力了,那么我們難道不應(yīng)該給它加入更多的特性,助它一臂之力嗎?今天蘋果就為 Switf 前端編程插上了翅膀,其最新發(fā)布的 SwiftUI 是一個基于 Swift 語言的、創(chuàng)新而又極為簡單的用戶界面解決方案,各種平臺上的應(yīng)用都能用它打造精致的用戶界面。
SwiftUI 使用統(tǒng)一的一套工具和 API,即可創(chuàng)建在任意蘋果設(shè)備使用的用戶界面。通過定義一個易讀易寫的聲明式 Swift 語法,SwiftUI 可以順暢的和 Xcode 工具一起完成設(shè)計工作。SwiftUI 自動支持動態(tài)字體調(diào)整(Dynamic Type)、暗黑模式(Dark Mode)、本地化(localization)和輔助功能(accessibility),這意味著開發(fā)者的第一行 SwiftUI 代碼是他們目前寫出的功能最強大的 UI 代碼。
- 官方教程:https://developer.apple.com/tutorials/swiftui/
- 官方文檔:https://developer.apple.com/documentation/swiftui/
SwiftUI 的特點是什么
SwiftUI 使用聲明式語法,所以我們可以簡單地聲明用戶界面的樣式。例如,開發(fā)者可以聲明需要由一串文本輸入框構(gòu)成的組件,然后定義每一個輸入框的字體對齊方式、字體樣式、字體顏色。這些代碼比以往更加易懂,省時并易于維護。
這種聲明式的方式甚至允許使用復(fù)雜的功能,如動畫(animation)。只需要幾行代碼,即可添加動畫在任何控件上,并且可以使用易于調(diào)用的特效。在運行時,SwifthUI 會自行控制創(chuàng)建流暢動作的所有步驟,并且可以解決程序沖突,保證 app 穩(wěn)定運行。動畫特效變得如此容易,我們可以發(fā)掘使 app 更加靈動的方式。
只需一次就能定義布局
開發(fā)者只需定義視圖(view)中內(nèi)容和布局,SwiftUI 懂得什么時候需要改變,并可以隨時更新(視圖)以匹配設(shè)計。
建立可復(fù)用的組件
組合小而簡單的視圖,構(gòu)成更大更復(fù)雜的界面。視圖可以在任何一處蘋果設(shè)備和平臺共享。
簡化動畫構(gòu)建
創(chuàng)建流暢的動畫效果十分簡單,如同聲明一個簡單的方法。SwiftUI 可以在需要的時候自動計算并渲染。
設(shè)計工具
Xcode 11 內(nèi)建了非常直觀的新設(shè)計工具,我們可以通過 SwiftUI 使用拖放等簡單操作而構(gòu)建界面。當(dāng)我們在設(shè)計面板時,我們編輯的所有內(nèi)容都與左邊編輯器的代碼完全同步。當(dāng)我們修改預(yù)覽(preview)時,對應(yīng)代碼可實時生成,也就是說我們對預(yù)覽修改的內(nèi)容能實時體現(xiàn)在代碼中。Xcode 會立即重新編譯你的修改,并將它們插入到 APP 的運行版中。因此在整個開發(fā)中,預(yù)覽可視化與代碼可編輯性能同時支持并交互。
如上所示為 SwiftUI 的代碼與預(yù)覽部分,它們之間是可以實時交互的??傮w而言,這種新型工具主要有以下三大特點:
拖拽:通過簡單拖拽 Canvas 上的控件來排列用戶界面上的各種組件。單機打開檢查器(inspector)以選擇字體、顏色、對齊方式和其它設(shè)計選項,我們也可以通過光標(biāo)輕松重新排列控件。這些視覺編輯器在代碼編輯器中也能用,所以我們可以使用檢查器挖掘每個控件的不同選項,即使在界面的手動編程部分也是一樣的。我們可以從庫中拖拽控件,再放入到設(shè)計面板或代碼面板都是可以的。
動態(tài)替換:Swift 編譯器和運行時可以完全嵌入到 Xcode 中,所以我們的 APP 會一直處于構(gòu)建和運行的狀態(tài)。我們看到的預(yù)覽界面并不是對用戶界面的近似,它就是我們的實時 APP。Xcode 會通過「動態(tài)替換」在實時 APP 中交換編輯的代碼,這是 Swift 中的新特征。
預(yù)覽:現(xiàn)在,我們可以創(chuàng)建任何 SwiftUI 視圖的一個或多個預(yù)覽,從而得到樣本數(shù)據(jù),并配置幾乎用戶能看到的所有內(nèi)容,例如大字體、定位或「暗黑模式」等。預(yù)覽還能在任何設(shè)備上以任何朝向展示我們的 UI。
GitHub 包管理也要支持 Swift
GitHub 有很多開源項目,但真正要做成包還是需要其它包管理工具,因此 GitHub 希望能直接根據(jù)源代碼發(fā)布公有或私有包。在蘋果發(fā)布 SwiftUI 的同時,Github5 月份提出的 Github Package Registry 將進一步支持 Swift 包,此前它已經(jīng)支持 JavaScript(npm)、 Java(Maven)等耳熟能詳?shù)墓ぞ摺?/p>
Swift 包使開發(fā)者可以更簡單的在不同的項目之間,以及 Swift 社區(qū)共享工具和源代碼。Swift 包管理器(Swift Package Manager),是一個跨平臺的構(gòu)建、運行、測試和打包你的 Swift 代碼的工具,現(xiàn)已在 Github 開源。包的信息已經(jīng)寫入 Swift,使我們可以更好地管理 Swift 中的 Target 、聲明 Product,并管理相關(guān)環(huán)境依賴。Swift 包管理器和 Github 包列表協(xié)作可以幫助開發(fā)者更容易發(fā)布自己的 Swift 項目。
使移動端開發(fā)者有更高效的生產(chǎn)力工具也十分重要。隨著 Swift 生態(tài)環(huán)境的增長壯大,能夠和蘋果團隊一起合作完成 Swift 開發(fā)工具流使 GitHub 的開發(fā)者非常興奮。在 Swift 包管理項目上線后,我們可以更加便捷地構(gòu)建和調(diào)用不同的開源工作。
參考鏈接:
- https://developer.apple.com/xcode/swiftui/
- https://github.com/apple/swift
- https://github.blog/2019-06-03-github-package-registry-will-support-swift-packages/