SwiftUI - 百行代碼變十行,Swift再創(chuàng)輝煌

蘋果開發(fā)者大會 WWDC 2019 在北京時間今天凌晨開幕袱瓮。在這場大會上除了「史上最難看 Mac 主機(jī)」、首次出現(xiàn)的iPadOS以外爱咬,我們還終于可以對飽受詬病的iTunes說再見了尺借。而對于開發(fā)者來說,新發(fā)布的 SwiftUI 可能是最吸引人的特性台颠,在 蘋果公司軟件工程高級副總裁Craig Federighi的演示中褐望,我們可以輕松地把一百行的前端代碼縮減到十幾行。

下面來一張牛逼哄哄的SwiftUI效果圖串前,給大家打打牙祭

  • 初體驗(yàn):左邊加大括號21行瘫里,右邊出現(xiàn)一些類似SB的東西,布局UI荡碾,設(shè)置屬性貌似都可以完成

SwiftUI 的特點(diǎn)是什么

SwiftUI 使用聲明式語法谨读,所以我們可以簡單地聲明用戶界面的樣式。

  • 開發(fā)者可以聲明需要由一串文本輸入框構(gòu)成的組件
  • 然后定義每一個輸入框的字體對齊方式坛吁、字體樣式劳殖、字體顏色。
  • 這些代碼比以往更加易懂拨脉,省時并易于維護(hù)哆姻。

這種聲明式的方式甚至允許使用復(fù)雜的功能,如動畫(animation)玫膀。只需要幾行代碼矛缨,即可添加動畫在任何控件上,并且可以使用易于調(diào)用的特效帖旨。在運(yùn)行時箕昭,SwifthUI 會自行控制創(chuàng)建流暢動作的所有步驟,并且可以解決程序沖突解阅,保證 app 穩(wěn)定運(yùn)行落竹。動畫特效變得如此容易,我們可以發(fā)掘使 app 更加靈動的方式货抄。

為什么需要 SwiftUI

下面是來自王巍對UIKit的詬病

UIKit 提供的是一套符合直覺的述召,基于控制流的命令式的編程方式朱转。最主要的思想是在確保 View或者 View Controller 生命周期以及用戶交互時,相應(yīng)的方法 (比如 viewDidLoad 或者某個 target-action 等) 能夠被正確調(diào)用桨武,從而構(gòu)建用戶界面和邏輯肋拔。不過,不管是從使用的便利性還是穩(wěn)定性來說呀酸,UIKit 都面臨著巨大的挑戰(zhàn)。我個人勉強(qiáng)也能算是 iOS開發(fā)的“老司機(jī)”了琼梆,但是掉到 UIKit 的坑里這件事性誉,也幾乎還是我每天的日常。UIKit的基本思想要求 View Controller 承擔(dān)絕大部分職責(zé)茎杂,它需要協(xié)調(diào) model错览,view 以及用戶交互。這帶來和巨大的 side effect 以及大量的狀態(tài)煌往,如果沒有妥善安置倾哺,它們將在 View Controller 中混雜在一起,同時作用于 view 或者邏輯刽脖,從而使?fàn)顟B(tài)管理愈發(fā)復(fù)雜羞海,甚至不可維護(hù)。不僅是用戶代碼曲管,UIKit本身內(nèi)部也經(jīng)常受困于可變狀態(tài)却邓,各種奇怪的 bug 也頻頻出現(xiàn)。

的確院水,我們平時開發(fā)很多的時間都浪費(fèi)在了這個方面腊徙,然而作為牛逼的,我也相信必然會一統(tǒng)江湖的 Swift 也是不忍心讓開發(fā)人員掉入這樣的坑中檬某,SwiftUI 只是一個開始---打開新世界的開始

聲明式語法

SwiftUI 使用了聲明式語法撬腾,所以開發(fā)者能夠十分輕易地描述用戶界面應(yīng)該做什么。例如恢恼,編寫需要包含文本字段的項(xiàng)目列表時民傻,開發(fā)者可以用代碼描述每個字段的對齊方式、字體和顏色厅瞎。代碼也比以前更簡單饰潜,更易于閱讀。

這種聲明式風(fēng)格非常適用于像動畫這樣復(fù)雜的元素和簸。通過 SwiftUI彭雾,開發(fā)者可輕松地將動畫添加到幾乎任何控件。

擁有更直觀的新設(shè)計(jì)工具

Xcode 11 包含更直觀的新設(shè)計(jì)工具锁保,可讓開發(fā)者通過拖拽的方式使用 SwiftUI 構(gòu)建界面薯酝,在這過程中可以直接設(shè)置控件的相關(guān)屬性半沽。

當(dāng)在設(shè)計(jì)工具中工作時,所編輯的內(nèi)容會立刻反映到代碼上吴菠,如果從模擬器切換到手機(jī)者填,手機(jī)也能立馬看到預(yù)覽效果。

為所有的蘋果設(shè)備提供原生體驗(yàn)

SwiftUI 是真正的原生 UI 框架做葵,建立在蘋果數(shù)十年打磨用戶界面的經(jīng)驗(yàn)上占哟。開發(fā)者通過少量代碼和交互式設(shè)計(jì)就能使用這個框架。

SwiftUI 示例代碼

為視圖的任何狀態(tài)聲明內(nèi)容和布局酿矢。SwiftUI知道該狀態(tài)何時發(fā)生變化榨乎,并更新視圖的呈現(xiàn)以匹配該狀態(tài)。

List(landmarks) { landmark in
   HStack {
      Image(landmark.thumbnail)
      Text(landmark.name)
      Spacer()
      
      if landmark.isFavorite {
         Image(systemName: "star.fill")
            .foregroundColor(.yellow)
      }
   }
}
  • 構(gòu)建可復(fù)用的組件

將小的瘫筐、單一職責(zé)的視圖組合成更大蜜暑、更復(fù)雜的接口。在為任何蘋果平臺設(shè)計(jì)的應(yīng)用程序之間共享自定義視圖策肝。

struct FeatureCard: View {
   var landmark: Landmark
   
   var body: some View {
      landmark.featureImage
         .resizable()
         .aspectRatio(3/2, contentMode: .fit)
         .overlay(TextOverlay(landmark))
   }
}
  • 簡便的動畫創(chuàng)建方式

創(chuàng)建平滑的動畫就像添加一個方法調(diào)用一樣簡單肛捍。SwiftUI在需要時自動計(jì)算和動畫轉(zhuǎn)換。

VStack {
   Badge()
      .frame(width: 300, height: 300)
      .animation(.basic())
   Text(name)
      .font(.title)
      .animation(Animation.basic().delay(0.25))
}

SwiftUI 支持的設(shè)備要求版本較高之众,將在7月份開啟公測拙毫,官方介紹如下:

iOS 13.0+ Beta
macOS 10.15+ Beta
UIKit for Mac 13.0+ Beta
tvOS 13.0+ Beta
watchOS 6.0+ Bet

推薦學(xué)習(xí)

SwiftUI詳細(xì)教程

拓展參考資料:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市酝枢,隨后出現(xiàn)的幾起案子恬偷,更是在濱河造成了極大的恐慌,老刑警劉巖帘睦,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件袍患,死亡現(xiàn)場離奇詭異,居然都是意外死亡竣付,警方通過查閱死者的電腦和手機(jī)诡延,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來古胆,“玉大人肆良,你說我怎么就攤上這事∫菀铮” “怎么了惹恃?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長棺牧。 經(jīng)常有香客問我巫糙,道長,這世上最難降的妖魔是什么颊乘? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任参淹,我火速辦了婚禮醉锄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘浙值。我一直安慰自己恳不,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布开呐。 她就那樣靜靜地躺著烟勋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪负蚊。 梳的紋絲不亂的頭發(fā)上神妹,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機(jī)與錄音家妆,去河邊找鬼。 笑死冕茅,一個胖子當(dāng)著我的面吹牛伤极,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姨伤,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼哨坪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了乍楚?” 一聲冷哼從身側(cè)響起当编,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎徒溪,沒想到半個月后忿偷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡臊泌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年鲤桥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渠概。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡茶凳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出播揪,到底是詐尸還是另有隱情贮喧,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布猪狈,位于F島的核電站箱沦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏罪裹。R本人自食惡果不足惜饱普,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一运挫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧套耕,春花似錦谁帕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至康愤,卻和暖如春儡循,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背征冷。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工择膝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人检激。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓肴捉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親叔收。 傳聞我的和親對象是個殘疾皇子齿穗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容