SwiftUI: 愛(ài)的初體驗(yàn)

前言

6月初,蘋(píng)果WWDC19大會(huì)更新了很多東西魂拦,不過(guò)作為iOS開(kāi)發(fā)人員更關(guān)注的還是SwiftUI、Combine這兩個(gè)庫(kù)。

SwiftUI是類似于Flutter和ReactNative使用Swift開(kāi)發(fā)寫(xiě)出來(lái)的一個(gè)聲明式UI開(kāi)發(fā)框架哮幢。

Combine是類似于RxSwift的響應(yīng)式編程庫(kù)。

雖說(shuō)現(xiàn)在入職公司項(xiàng)目是Objective-C志珍,但是身在曹營(yíng)心在漢橙垢,端午前一天還是第一時(shí)間下載了XCode11,體驗(yàn)了一把伦糯。當(dāng)時(shí)不管怎么弄柜某,蘋(píng)果官方宣稱的那個(gè)預(yù)覽頁(yè)就是出不來(lái)嗽元。后來(lái)又把系統(tǒng)升級(jí)到了10.15,預(yù)覽頁(yè)才顯示出來(lái)喂击。

Combine并沒(méi)有太大的吸引力讓我第一時(shí)間去研究剂癌,畢竟RxSwift在這一方面已經(jīng)做得很6了。

SwiftUI卻是我在受盡了UIKit各種痛點(diǎn)折磨之后夢(mèng)寐以求的庫(kù)翰绊,所以第一時(shí)間看了一遍SwiftUI的各種用法珍手。看完除了各種臥槽的驚嘆中辞做,感覺(jué)還是有太多的可以優(yōu)化的點(diǎn)琳要。

先說(shuō)好處:

第一眼看SwiftUI的時(shí)候,有種似曾相識(shí)的感覺(jué)秤茅,這TM簡(jiǎn)直就是Flutter的翻版稚补。

整個(gè)框架是面向協(xié)議開(kāi)發(fā),基本每個(gè)控件都是Struct框喳,充分發(fā)揮了Swift的特性课幕,同時(shí)可以把任意UIKit控件集成到SwiftUI。

框架整體思想大致和Flutter差不多五垮,都是這種嵌套的形式寫(xiě)法乍惊。每一層小控件可以外面包一層大的控件,好處顯而易見(jiàn)放仗,我可以任意根據(jù)需求堆砌封裝出一個(gè)新的組件润绎。

Color、Image诞挨、Text等等這些全都實(shí)現(xiàn)了View協(xié)議莉撇,也就意味著畫(huà)一個(gè)圓形、設(shè)置一個(gè)背景視圖惶傻、對(duì)圖片做一些處理就跟創(chuàng)建一個(gè)文本一樣簡(jiǎn)單棍郎。多個(gè)Text控件相加就能組成一個(gè)屬性字符串Label控件。雖沒(méi)有深入分析每個(gè)控件银室,但是整體瀏覽完SwiftUI涂佃,對(duì)寫(xiě)UI只有一個(gè)體驗(yàn)就是。蜈敢。自由辜荠。

SwiftUI中數(shù)據(jù)交流采用的是Redux這種單向數(shù)據(jù)流思想、并且提供了@propertyDelegate來(lái)實(shí)現(xiàn)類似于python中的裝飾函數(shù)那種效果扶认。

平時(shí)開(kāi)發(fā)只需要 在數(shù)據(jù)屬性前面加上@State侨拦,即可實(shí)現(xiàn) 每次更改數(shù)據(jù),UI動(dòng)態(tài)更新的效果辐宾。當(dāng)然還有很多類似于@Environment狱从、@ObjectBinding這些沒(méi)有一一去深入研究的膨蛮。

另外為了優(yōu)雅的實(shí)現(xiàn)在閉包中連續(xù)返回多個(gè)View再把這幾個(gè)View封裝成一個(gè)View,蘋(píng)果還新加了一個(gè)@_functionBuilder季研。

再說(shuō)壞處:

每個(gè)新東西出來(lái)都要大量的ren rou測(cè)試 去完善敞葛、去提意見(jiàn)。SwiftUI庫(kù)作為新出的庫(kù)同樣問(wèn)題不少与涡。

SwiftUI可能是為了實(shí)現(xiàn)鏈?zhǔn)骄幊?一鏈到底惹谐,做了大量的類型約束、類型兼容工作驼卖。這就讓很多方法返回類型看起來(lái)很奇怪閱讀性很差氨肌,特別是對(duì)我這種英文不好的開(kāi)發(fā)者。

由于XCode編譯器的原因酌畜,因?yàn)楹芏喾椒ǘ际荲iew協(xié)議的擴(kuò)展怎囚,這就導(dǎo)致寫(xiě)代碼時(shí) 代碼提示一下子出來(lái)幾十個(gè)方法,還有可能設(shè)置了也沒(méi)效果桥胞,很多本身并不需要某些方法的控件也都提示恳守。個(gè)人感覺(jué)這是SwiftUI對(duì)類型約束沒(méi)做好,或者說(shuō)Swift和XCode本身需要一定改進(jìn)贩虾。

讓我印象最深的還是平時(shí)使用肯定最多的Text控件催烘,Text如果是在List中表現(xiàn)其實(shí)還滿意,目前List內(nèi)部是使用UITableView實(shí)現(xiàn)的缎罢。Text設(shè)置lineLimit為0和nil都是不限制行數(shù)伊群,但是設(shè)置成0的時(shí)候抗壓縮能力比較弱,設(shè)置成nil時(shí)抗壓縮能力比較強(qiáng)屁使,這一點(diǎn)不試試還真不知道在岂。感覺(jué)參數(shù)傳成有意義的枚舉可能比單純的Option使用性更強(qiáng)一點(diǎn)。

不過(guò)當(dāng)我把Text控件放到ScrollView控件中且Text比較長(zhǎng)超出一屏的時(shí)候蛮寂,有個(gè)特別懵逼的事情,不管怎么設(shè)置就是沒(méi)法換行易茬,設(shè)置了lineLimit和frame(width:)也還是顯示一行酬蹋。不知道是哪里的設(shè)置姿勢(shì)不對(duì),小小的邊界自動(dòng)換行或者指定寬度自動(dòng)換行需求把我難到了抽莱。

最后:

SwiftUI雖然iOS13才能用范抓,不過(guò)庫(kù)里面涉及到很多的設(shè)計(jì)理念,的確是讓人耳目一新食铐。即使短期內(nèi)用不了匕垫,相信也會(huì)對(duì)iOS開(kāi)發(fā)圈子造成很大的沖擊力。只要幾年后SwiftUI入主正宮虐呻,之前為了解決UIKit各種痛點(diǎn)而橫空出世的庫(kù)象泵,相信都可以不用了寞秃。

RxSwift可以用Combine代替,ReSwift或者其他單向數(shù)據(jù)流庫(kù)也可以扔掉了偶惠。那些動(dòng)畫(huà)庫(kù)在SwiftUI簡(jiǎn)易的動(dòng)畫(huà)創(chuàng)建方式下也再?zèng)]有神秘感春寿。那些靜態(tài)表單庫(kù)或者數(shù)據(jù)流驅(qū)動(dòng)Table局部更新的庫(kù)也可以扔掉了,因?yàn)長(zhǎng)ist默認(rèn)支持靜態(tài)和動(dòng)態(tài)cell結(jié)合忽孽。不知道何時(shí)蘋(píng)果能出一套使用簡(jiǎn)單的Swift思想開(kāi)發(fā)的網(wǎng)絡(luò)請(qǐng)求框架绑改。

幾年后無(wú)論蘋(píng)果還在不在,感覺(jué)聲明式UI框架一定會(huì)成為主流兄一。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末厘线,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子出革,更是在濱河造成了極大的恐慌造壮,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹋盆,死亡現(xiàn)場(chǎng)離奇詭異费薄,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)栖雾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)楞抡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人析藕,你說(shuō)我怎么就攤上這事召廷。” “怎么了账胧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵竞慢,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我治泥,道長(zhǎng)筹煮,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任居夹,我火速辦了婚禮败潦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘准脂。我一直安慰自己劫扒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布狸膏。 她就那樣靜靜地躺著沟饥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贤旷,一...
    開(kāi)封第一講書(shū)人閱讀 52,158評(píng)論 1 308
  • 那天广料,我揣著相機(jī)與錄音,去河邊找鬼遮晚。 笑死性昭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的县遣。 我是一名探鬼主播糜颠,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼萧求!你這毒婦竟也來(lái)了其兴?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤夸政,失蹤者是張志新(化名)和其女友劉穎元旬,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體守问,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡匀归,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耗帕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穆端。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖仿便,靈堂內(nèi)的尸體忽然破棺而出体啰,到底是詐尸還是另有隱情,我是刑警寧澤嗽仪,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布荒勇,位于F島的核電站,受9級(jí)特大地震影響闻坚,放射性物質(zhì)發(fā)生泄漏沽翔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一窿凤、第九天 我趴在偏房一處隱蔽的房頂上張望搀擂。 院中可真熱鬧,春花似錦卷玉、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春寝并,著一層夾襖步出監(jiān)牢的瞬間箫措,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工衬潦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留斤蔓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓镀岛,卻偏偏與公主長(zhǎng)得像弦牡,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子漂羊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

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