[SwiftUI練級-1] 餐費計算器 · part1

[SwiftUI練級-1] 餐費計算器 · part1

更多內(nèi)容歡迎關(guān)注公眾號:BoBo清吧

SwiftUI是一個為iOS汇恤,macOS六剥,tvOS,乃至watchOS構(gòu)建交互式應用的強大框架辆童。當然恰起,在學習它之前,你需要先熟悉Swift語言本身:這是一門強大而且靈活的現(xiàn)代編程語言颁褂。

如果你對Swift語言還不是很了解故响,可以移步閱讀我的《極速Swift》系列文章,對Swift語言來一個速覽颁独。

如果你已經(jīng)熟悉Swift語言彩届,那就讓我們即刻開始項目實踐吧。

AA餐費計算器(WeSplit) - 介紹

這是一個演示項目誓酒,構(gòu)建的app是去飯店吃飯后可以用到的AA餐費計算器惨缆。你輸入餐費,選擇要留的小費比例丰捷,用餐人數(shù)坯墨,app會告訴你每個人需要付的費用。

項目非常簡單病往,目的是教你一些SwiftUI的基礎(chǔ)知識捣染。

你將了解到UI設(shè)計的基礎(chǔ),如何讓用戶輸入數(shù)值停巷,如何從選項中選取耍攘,以及如何跟蹤程序狀態(tài)。由于是第一個項目畔勤,我會放慢節(jié)奏蕾各,解釋清每一個概念。

項目被分為三個階段:

介紹你將用到的各種技術(shù)

手把手的項目構(gòu)建導引

需要你自行完成的挑戰(zhàn)

每個階段都很重要庆揪,因此不要著急推進式曲。

第一步,我將介紹獨立的組件,以便你理解它們每一個是如何工作的吝羞。代碼會有不少兰伤,包括我的解釋性描述。這個步驟會放在概覽中: 關(guān)于是什么钧排,怎么工作敦腔,以及如何使用。

第二步恨溜,把學習到的組件應用于實踐符衔。你將得到更多的上下文,為什么我們要用它們糟袁,它們是如何與其他組件配合的判族。

最后一步我們將總結(jié)學到的知識。

長話短說系吭,讓我們開始吧五嫂。

啟動Xcode颗品,選擇創(chuàng)建一個新的Xcode項目肯尺,你會面對一組選項,請選擇iOS和Single View App躯枢,然后點擊下一步则吟,在下一屏的向?qū)гO(shè)置中,你需要這么做:

Product Name 輸入 “WeSplit”

Organization Identifier 輸入任何你想要的反向域名的字符串

Language 選擇 Swift

User Interface 選擇 SwiftUI

確保底部所有的checkbox沒有勾選锄蹂。

一切準備好后氓仲,點擊Next,然后選擇你想要存儲項目的位置得糜,最后點擊Create敬扛。Xcode將為你創(chuàng)建好工程,并且打開編輯器朝抖。

稍后我們將基于這個工程構(gòu)建我們的AA餐費計算器啥箭,不過目前為止我們只需要把這個工程當成試驗代碼的沙盒環(huán)境就好。

動手完成吧治宣!

了解一個SwiftUI應用的基本結(jié)構(gòu)

當你創(chuàng)建一個SwiftUI應用時急侥,你將得到一組總計100行左右代碼的文件。大部分代碼其實什么事也沒做侮邀,只是占位符而已坏怪,你可以先忽略它們。隨著教程推進绊茧,這些占位符的代碼將會被修改铝宵。

在Xcode中,你會在左邊的空間看到這些文件华畏,這個空間被稱為project navigator:

AppDelegate.swift 包含管理app的代碼捉超。過去經(jīng)常需要在這里添加代碼胧卤,不過現(xiàn)在已經(jīng)很少了。

SceneDelegate.swift 包含啟動app窗口的代碼拼岳。在iPhone上這個類做的事情不多枝誊,但是在iPad上,可能同一時間有幾個app打開惜纸,因此這個類很重要叶撒。

ContentView.swift 包含程序UI的初始化代碼,也是我們這個項目中所有邏輯書寫的地方耐版。

Assets.xcassets 是一個asset catalog祠够,app中所有圖片資源的集合。除了app圖標粪牲, iMessage貼紙古瓤,你還可以在這里添加顏色。

LaunchScreen.storyboard 是一個創(chuàng)建小塊UI的視覺編輯器腺阳,這些UI會在app啟動時展示落君。

Info.plist 是一個特殊值的集合。這些值向系統(tǒng)描述你的app如何工作亭引,包括它的版本绎速,支持的設(shè)備方向,等等焙蚓。這些雖然不是代碼纹冤,但也十分重要。

Preview Content 是一個黃色的組购公,內(nèi)部有 Assets.xcassets萌京,這是另一個asset catalog,向你展示程序運行時是長什么樣宏浩。

由于項目中所有的邏輯都位于ContentView知残,Xcode已經(jīng)為你打開了這個文件。文件頭部有一些注釋绘闷,你也可以在這里添加你自己的說明橡庞。

注釋之后是10多行的代碼:

import SwiftUI

struct ContentView: View {

? ? var body: some View {

? ? ? ? Text("Hello World")

? ? }

}

struct ContentView_Previews: PreviewProvider {

? ? static var previews: some View {

? ? ? ? ContentView()

? ? }

}

在開始寫我們自己的代碼之前,值得了解一下這些代碼都是做什么用的印蔗。

首先扒最,import SwiftUI 告訴 Swift 我們將使用 SwiftUI 框架提供給我們的全部功能。Apple 為我們提供了許多框架华嘹,諸如機器學習吧趣,音頻播放,圖像處理等等。相比假定我們將用到所有的功能强挫,我們需要告知 Swift 我們要用到哪些部分岔霸,以便提前加載。

其次俯渤,struct ContentView: View 創(chuàng)建了一個新的名叫 ContentView 的結(jié)構(gòu)體呆细,這個結(jié)構(gòu)體遵循 View 協(xié)議。View 來自 SwiftUI八匠,并且是所有需要被繪制到屏幕的元素都必須適配的基礎(chǔ)協(xié)議絮爷,包括所有的文字,按鈕梨树,圖像以及其他視圖坑夯。

第三,var body: some View 定義了一個新的計算屬性抡四,名叫 body柜蜈,它有一個很有趣的類型:some View,這代表著一個遵循 View 協(xié)議的類型指巡,但這個額外的 some 關(guān)鍵字同時也添加了一個重要約束: 你必須總是返回相同的類型淑履,不能一會返回一個類型,一會又返回另一個不同的類型厌处。

稍晚些我們會介紹這個特性鳖谈,不過現(xiàn)在只需要理解它代表“這個屬性必須返回某個特定類型的view”岁疼。

View 協(xié)議只有一個要求阔涉,你必須實現(xiàn)一個叫 body 的計算屬性,返回 some View捷绒。當然瑰排,你可以添加更多的屬性和方法,但 body 是唯一必須實現(xiàn)的暖侨。

第四椭住,Text("Hello World") 創(chuàng)建了一個用字符串“Hello World”構(gòu)造的文本視圖。文本視圖是簡單的靜態(tài)文本字逗,必要時會自動對多行文本進行折行京郑。

在 ContentView 結(jié)構(gòu)體的下面,你會看到一個 ContentView_Previews 的結(jié)構(gòu)體葫掉,它遵循的是 PreviewProvider 協(xié)議些举。這部分代碼并不會成為你的最終app的一部分,它是專供Xcode用來預覽你的視圖的代碼俭厚。

這些預覽用到了一個叫canvas的XCode特性户魏,通常直接在你代碼的右側(cè)可視化呈現(xiàn)。你還可以定制這個canvas的展示方式。

Xcode只能在macOS Catalina或者之后的版本上展示叼丑。

提示: 你會經(jīng)常發(fā)現(xiàn)关翎,你代碼中的錯誤會導致canvas的預覽停止,你會遇到“Automatic preview updating paused”鸠信,你可以點擊Resume修復它纵寝。如果頻繁使用,建議記下快捷鍵:Option+Cmd+P星立。

其他知識碎片

在開始項目之前店雅,你還需要學習以下幾塊知識碎片。

創(chuàng)建Form

增加導航欄

修改程序碎片

綁定狀態(tài)到UI控件

利用循環(huán)創(chuàng)建視圖

完成之后贞铣,讓我們回到這里闹啦,繼續(xù)我們的項目實踐。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辕坝,一起剝皮案震驚了整個濱河市窍奋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌酱畅,老刑警劉巖琳袄,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異纺酸,居然都是意外死亡窖逗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門餐蔬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碎紊,“玉大人,你說我怎么就攤上這事樊诺≌炭迹” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵词爬,是天一觀的道長秃嗜。 經(jīng)常有香客問我,道長顿膨,這世上最難降的妖魔是什么锅锨? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮恋沃,結(jié)果婚禮上必搞,老公的妹妹穿的比我還像新娘。我一直安慰自己芽唇,他們只是感情好顾画,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布取劫。 她就那樣靜靜地躺著,像睡著了一般研侣。 火紅的嫁衣襯著肌膚如雪谱邪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天庶诡,我揣著相機與錄音惦银,去河邊找鬼。 笑死末誓,一個胖子當著我的面吹牛扯俱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播喇澡,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼迅栅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了晴玖?” 一聲冷哼從身側(cè)響起读存,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎呕屎,沒想到半個月后让簿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡秀睛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年尔当,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹂安。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡椭迎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出藤抡,到底是詐尸還是另有隱情侠碧,我是刑警寧澤抹估,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布缠黍,位于F島的核電站,受9級特大地震影響药蜻,放射性物質(zhì)發(fā)生泄漏瓷式。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一语泽、第九天 我趴在偏房一處隱蔽的房頂上張望贸典。 院中可真熱鬧,春花似錦踱卵、人聲如沸廊驼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妒挎。三九已至绳锅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間酝掩,已是汗流浹背鳞芙。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留期虾,地道東北人原朝。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像镶苞,于是被迫代替她去往敵國和親喳坠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359