SwiftUI【0】
SwiftUI【0】
最近開始瞭解學習SwiftUI的相關內容。參考了簡書、CSDN以及百度的一些文件,幫助自己有個更好的瞭解。
前言
蘋果在2019年的WWDC的重頭戲當然非SwiftUI莫屬:全新的宣告式語法、繫結式API、和響應式變成框架Combine。這一切的一切都預示著即將在Apple Native佈局系統掀起一場革命。為此,蘋果在很多方面都做了努力,這才促成了SwiftUI現在的樣子。想要了解Swift的新特性、SwiftUI資料流和SwiftUI佈局系統等新知識嗎?一起來看吧。
快速入手
官方教學網站
可以進入瞭解相關概念,學習技術語法。
什麼是SwiftUI?
蘋果官方介紹
寫更少的程式碼,打造更出色的 app。
SwiftUI 是一種創新、簡潔的程式設計方式,通過 Swift 的強大功能,在所有 Apple 平臺上構建使用者介面。
藉助它,您只需一套工具和 API,即可建立面向任何 Apple 裝置的使用者介面。
SwiftUI 採用簡單易懂、編寫方式自然的宣告式 Swift 語法,可無縫支援新的 Xcode 設計工具,讓您的程式碼與設計保持高度同步。
SwiftUI 原生支援“動態字型”、“深色模式”、本地化和輔助功能——第一行您寫出的 SwiftUI 程式碼,就已經是您編寫過的、功能最強大的 UI 程式碼。
蘋果的官方介紹透露了大量的隱藏資訊,例如通過SwiftUI打通所有蘋果裝置之間的壁壘,實現蘋果世界的大一統。通過SwiftUI打通程式設計師與設計師之間的鴻溝,讓App開發更具工匠精神。通過SwiftUI來提供你的程式碼的表達力,一句勝千言。
對於介紹的理解
SwiftUI是一個使用者介面工具包,可讓我們以宣告的方式設計應用程式。這是一種奇特的方式,我們告訴SwiftUI我們希望UI的展示效果和工作方式,它知道如何在使用者與之互動時實現這一點。
SwiftUI 是一種非常簡單的創新方法,可以利用 Swift 的強大能力在所有蘋果裝置平臺上構建使用者介面。通過 SwiftUI,開發者僅使用一組工具和 API 就能為所有蘋果裝置構建使用者介面。SwiftUI 使用易於閱讀和編寫的宣告式 Swift 語法,可與新的 Xcode 設計工具無縫協作,使你的程式碼和設計完美同步。SwiftUI 自動支援動態型別、黑暗模式、本地化和可訪問性,你的 SwiftUI 程式碼將成為你寫過的最強大的 UI 程式碼。
SwiftUI還充當跨平臺的使用者介面層,可跨iOS,macOS,tvOS甚至watchOS執行。這意味著你現在可以學習一種語言和一種佈局框架,然後將程式碼部署到任何地方。
SwiftUI 優點
- Apple says SwiftUI is the shortest path to building great apps on every device. 蘋果說SwiftUI是製作跨平臺偉大App的最短路徑。
- SwiftUI滿足了程式設計師複雜貼上程式碼的需求,傳統IB和storyboard編輯頁面方式造成程式碼很難被複用
- 跨平臺的便利性
Swift 5.1 新語法以及SwiftUI演算法介紹
參考文章:
系列文章深度解讀|SwiftUI 背後那些事兒
應用舉例
示例1:
示例2:
基於SwiftUI的一個簡單示例
介紹了通過宣告和修改檢視來佈局UI,以及使用狀態變數來更新UI。
示例3:
作者使用swiftui開發了一個記錄習慣的APP,頁面簡潔,很有iOS的簡潔味道,文章還有開原始碼,可以進行檢視;
APP的效果如下:
使用問題
- SwiftUI可以在哪裡使用?
SwiftUI在iOS 13,macOS 10.15,tvOS 13和watchOS 6或這些平臺的任何更高版本上執行。這意味著,如果您使用的應用程式必須支援iOS N-1甚至N-2(即當前版本和該版本之前的一兩個版本),那麼您甚至需要一兩年的時間才能考慮遷移到SwiftUI 。
但是,重要的是不要將SwiftUI視為類似於Java的Swing或React Native的多平臺框架。官方說法似乎是,SwiftUI不是一個多平臺框架,而是一個用於在多個平臺上建立應用程式的框架。
聽起來可能是一樣的,但是有一個重要的區別:Apple並不是說您可以在每個平臺上使用相同的SwiftUI程式碼,因為有些事情是不可能的–無法在Mac上使用Apple Watch的數字王冠例如,並且類似地在watchOS應用上具有選項卡欄也將無法工作。
- SwiftUI會取代UIKit嗎?
不會。SwiftUI的許多部分都直接建立在現有UIKit元件之上,例如UITableView。當然,許多其他部分則沒有,它們是SwiftUI而非UIKit呈現的新控制元件。
但是重點不是UIKit涉及的程度。相反,關鍵是我們不在乎。SwiftUI或多或少完全掩蓋了UIKit的行為,因此,如果您為SwiftUI編寫應用程式,並且Apple在兩年內用唱的大象代替了UIKit,那麼您不必在乎–只要Apple使大象具有相同的方法和屬性即可該UIKit暴露於SwiftUI,您的程式碼不變。
- SwiftUI是否使用自動佈局?
儘管Auto Layout肯定會在幕後用於某些事情,但作為SwiftUI設計師並沒有暴露給我們。取而代之的是,它使用了靈活的盒式佈局系統,這對於來自Web的開發人員來說將是熟悉的。
- SwiftUI快嗎?
SwiftUI是令人訝異的快-在所有我的測試中,到目前為止,似乎超越的UIKit。與做到這一點的團隊交談後,我開始明白為什麼:首先,他們積極地扁平化圖層層次結構,這樣系統就不必做更多的繪製了,但是第二步,很多操作完全繞過了Core Animation,直接去了Metal進行了額外的處理。速度。
所以,是的:SwiftUI的速度非常快,而且所有這些都無需我們做任何額外的工作。
- 為什麼看不到我的程式碼預覽?
使用SwiftUI時,能夠同時檢視檢視程式碼和檢視預覽(外觀)非常有幫助。如果您可以看到程式碼而不是預覽,則可能是您尚未升級到macOS 10.15;必須進行預覽才能正常工作。
- 程式碼與預覽的匹配程度如何?
對預覽進行任何更改時,它也會更新生成的程式碼。同樣,如果更改程式碼,它也會更新使用者介面。因此,程式碼和預覽是相同的,並且始終保持同步。
發展前景
作者:iOSer
來源:知乎
得益於swift的開源,以及蘋果的號召力,swift發展的很好。已經得到了廣大開發者的一致認可。蘋果自己也很重視,新的一些lib和app已經用swift編寫。國外大廠比如Uber、LinkedIn已經用swift開發了很長時間。這些行動證明了swift已經不是一門玩具語言可以大膽的在開發中使用。雖然眼下還有ABI不穩定,和Xcode索引會讓人覺得慢等問題。但是相比OC的巨大進步,更多開發者選擇了忍受,希望蘋果能夠持續優化。但是OC的runtime依然是無可取代,從商業角度看也沒有理由取締它。所以兩者還會互相存在一段時間。但是我相信swift佔有率超過OC的節點很快就會到來。我覺得很多人堅持OC是因為他們只會OC。移動市場已經飽和2008年蘋果釋出第一個SDK,同年年末安卓1.0釋出。移動開發元年。移動開發從無到有,至今已經遍及生活各個方面。
從2019年手機的出貨量和身邊的觀察很容易得到這樣的結論:移動開發這塊蛋糕的高速增長已經結束了。這意味著什麼呢?在一個行業高速增長的時候,人才一定是供不應求。所以公司被迫接收很多新手,對新人很友好。相信大家也見證了過去一兩年裡的就業奇蹟:是個人就能上。所以對於很多隻是為了餬口的人而言:這扇門已經關閉了。你們繼續去追下一個熱潮吧。聽說JavaScript要統一天下了,要不您去21天學個前端?言歸正傳,那移動開發是不是就要大勢已去了呢?
朋友,恕我直言:不是移動開發不行,是你不行。在移動浪潮前,網際網路流量全在桌面,問2008年的時候有條件坐在電腦前上網的人群有多少?再看現在,微信這個季度的活躍使用者5億多。雖然iOS的份額只有百分十幾。但是這是無法被忽略的百分之十幾,公司但凡有移動業務肯定會做iOS客戶端。
所以iOS開發的市場依然存在,而且不是一塊小蛋糕。在移動開發前幾年的時間裡,想在移動端做功能只有開發Native app這麼一條路。但是商業就是如此,隨著需求增大最後總是會有提高效率或者一些自動化的方案出來。相信很多人都有看到類似的文章:你不需要開發一個app只需要一個公眾號就可以了。前陣子微信推出小程式沒見過世面的吃瓜群眾們也是激動了一番。其實這只是一筆經濟賬。現在對於產品而言,有了更多的選擇。如果一個產品本身對native的能力要求就很低,當然會選擇更便宜的方式了。
除了微信小程式這樣嵌入在微信裡的方案。由傳統web端發起的新技術Progressive Web App也很值得關注。簡單的說web也可以有一個方便的渠道生成一個本地的app,獲得一些推送、本地儲存等一些能力。稍微有一些無奈的是iOS目前還不支援pwa。蘋果去年宣佈5年內會支援這個標準,然而除apple外其他廠家已經全部支援,現在安卓上是支援的。所以雖然這件事現在還沒發生,但是不久的將來應該會有新的進展。總而言之,很多移動產品不再需要開發一個native app了。
但是,凡事不要難過的太早,說不定還有更慘的呢?React Native VS Weex我覺得那些用RN的人最後都會哭。算了,我知道你們會選擇倔強。先從感情上說。你是相信馬雲爸爸還是相信404伯格?RN現在的硬傷有:1、包無法增量更新2、長列表沒有優化(災難性tableview cell沒有複用)3、不支援web當然了這些不是實現不了,是的,你完全可以自己實現上面的三個難題。但是如果已經有一個現成的方案呢?是的,阿里的weex已經走在RN的前面。我不知道是阿里的996更努力還是馬爸爸砸的錢就是多,但是事實就是如此。RN是一個純開源的專案,所以不可能將來RN有個殺手級的功能weex沒有。比的就是誰走的更快,看的更遠。大家要有自信,在移動開發上,我們的實力已經是世界一流了。所以,對於native不幸的訊息來了:即便是native的app,很多功能也要交給前端實現了。這筆賬是非常清楚的:原來需要一前端,一個iOS,一個安卓。現在只需要前端寫一次。粗粗一算節省了三分二的成本。但是就像java一開始就吹的run anywhere。什麼技術都有它的應用場景,不是能用大家就用這個技術。可是根據我的觀察,在優化了效能問題後,一個app裡有非常多的頁面確實不需要native寫了,用這種weex的方案就能解決了。而且開發效率的提升是如此的明顯,將來會有大量的頁面不再需要native寫程式碼發版了。移動開發者的未來首先你要接受一個事實,我們生活在一個科技變革最快的時代。很不幸軟體行業又是所有行業變化最劇烈的行業。
摩爾定律每18個月計算能力翻一倍。在其他行業什麼東西能每兩年增加一倍而且持續幾十年?換句話說,選擇了軟體開發,過去二十年裡除了C++,C,Java至今依然大量需求,選擇其他技術或者語言都經歷了潮起潮落。那麼從開始有程式設計師至今有多少語言呢?所以說,一門技術興起然後被冷落,如果用十年的尺度來看是非常正常的。我們的父輩在七十年代也不相信國企會下崗。你也不要抱有熟悉了一門技術可以養活你一輩子。
你怎麼理解 iOS 程式設計?某門技術或者某個程式語言說到底只是工具罷了。原來你用筷子,後來你來到了西餐廳,只有刀叉你就吃不了飯了?活該你餓死。不是iOS沒有人要,很多公司現在都在招iOS的開發者,主要是很多iOS的開發者已經沒有那種創新的想法跟不上市場需求公司需求,但是自己也沒有認清自己,所以被淘汰了才來怪這個行業 ,每個行業都是會飽和的,趨於平穩的,但是優勝劣汰是一直存在的,所以只要你的技術一直創新符合市場的需求,那就不存在沒有人要 ,歸根結底,還是自己淘汰了自己
參考
以下是本文的一些參考以及引用地址:
相關文章
- SwiftUI or Flutter ?SwiftUIFlutter
- 【譯】Fucking SwiftUISwiftUI
- SwiftUI學習(一)SwiftUI
- swiftUI-@State 的作用SwiftUI
- swiftUI- @Observable的使用SwiftUI
- swiftUI-@Environment的作用SwiftUI
- swiftUI-extension的使用SwiftUI
- 在 SwiftUI 中使用 Metal ShaderSwiftUI
- 打通SwiftUI任督二脈SwiftUI
- SwiftUI Image 圖片處理SwiftUI
- SwiftUI 學習路線圖SwiftUI
- 【譯】WWDC2019之SwiftUISwiftUI
- [SwiftUI 100 天] iExpense - part1SwiftUI
- [SwiftUI 100天] BetterRest · part4SwiftUIREST
- [SwiftUI 100天] WorldScramble · part1SwiftUI
- swiftUI-@Bindable和@Binging的作用SwiftUI
- 解析SwiftUI佈局細節(一)SwiftUI
- SwiftUI 怎麼和 Core Data 結合?SwiftUI
- [SwiftUI 100天] Bucket List - part2SwiftUI
- [SwiftUI 100天] Bucket List - part1SwiftUI
- [SwiftUI 100天] Bucket List - part4SwiftUI
- [SwiftUI 100天] Bucket List - part3SwiftUI
- [SwiftUI 100 天] Cupcake Corner - part1SwiftUIPCA
- 【譯】[SwiftUI 100 天] Animations - part4SwiftUI
- SwiftUI 簡明教程之自定義 ModifierSwiftUI
- SwiftUI 簡明教程之指示器SwiftUI
- 從用SwiftUI搭建專案說起SwiftUI
- 用SwiftUI寫一個簡單頁面SwiftUI
- 【譯】[SwiftUI 100 天] Cupcake Corner - part2SwiftUIPCA
- SwiftUI Release 引入的輔助焦點管理SwiftUI
- SwiftUI圖片處理(縮放、拼圖)SwiftUI
- SwiftUI 簡明教程之文字與圖片SwiftUI
- SwiftUI 官方畫圖例項詳細解析SwiftUI
- SwiftUI:看我展示52張撲克牌,“很快啊!”SwiftUI
- 關於SwiftUI,看這一篇就夠了SwiftUI
- 從實際問題看 SwiftUI 和 Combine 程式設計SwiftUI程式設計
- IOS Widget(3):SwiftUI開發小元件佈局入門iOSSwiftUI元件
- 2022-07-16:以下go語言程式碼輸出什麼?A:[];B:[5];C:[5 0 0 0 0];D:[0 0 0Go