使用Swift編程語言開發(fā)iOS應用(一)

1. ?在開發(fā)iOS應用之前需要學習一些Swift語言基礎,在Swift Playground上練習Swift語法是一個快捷、有效同時十分有趣的過程。與iOS應用開發(fā)相比氓皱,Swift Playground是一個獨立的工程項目,使用擴展名為playground的項目文件波材,它是蘋果公司首次與Swift語言一起推出的項目股淡。我們知道Swift是一種腳本風格的語言,而Swift Playground正是針對這個特性推出的運行平臺(類似可運行腳本的控制臺)廷区,可以與代碼交互直接看到執(zhí)行結果唯灵。Playground在英語中意為操場-學生、青少年嬉戲玩耍的地方隙轻,Swift Playground的logo是一個兩個兒童玩耍蹺蹺板的圖案埠帕,如下圖。

2. ?本文的學習目標

1) 區(qū)分常量和變量

2) 知道何時使用隱式和顯式的類型聲明

3) 理解使用可選類型(optionals)和可選類型綁定(optional binging)的好處

4) 區(qū)分可選類型(optionals)和隱式解包可選類型(unwrapped optionals)

5) 理解條件語句和循環(huán)的目的

6) 使用switch語句用于超出二進制條件的條件分支

7) 使用where子句在條件語句中加入附加約束

8) 區(qū)分函數(shù)玖绿、方法和構造器(initializers)

9) 區(qū)分類敛瓷、結構體和枚舉

10) 理解繼承(inheritance)和協(xié)議(protocol)所遵循的語法

11) 輸入和使用UIKit

3 ?基本類型

3.1? 常量在第一次聲明后就始終數(shù)值不變,而變量則是可以聲明后仍可改變數(shù)值斑匪。一個常量被指為非改變的(immutable)呐籽,一個變量則被指為可改變的(mutable)。使用let聲明一個常量蚀瘸,使用var聲明一個變量狡蝶。

上面用到了類型判斷(type inference),根據(jù)myVariable后面的初始值判斷myVariable是Int類型苍姜,同樣myConstant也是Int類型牢酵。完整的語句如下:

如果初始值和實際類型不一致,則需要顯式聲明類型衙猪,explicitDouble的初始值是Int馍乙,因此需要顯式聲明Double類型。

數(shù)據(jù)的類型永遠不會隱式轉(zhuǎn)換成其他類型垫释,需要進行顯式轉(zhuǎn)換處理丝格。下面是一個Int轉(zhuǎn)換成String的例子。

另一種更簡單的方法在字符串中添加數(shù)值類型棵譬,使用“\”和”()”显蝌,如下:

3.2? 可選類型(optionals)

使用”?”可選類型聲明數(shù)值可能為空(nil)

可選類型的數(shù)值需要使用解包(unwrap)后,才能進行賦值订咸,一個簡單直接的方法:使用強制解包”!”進行賦值曼尊,只有使用解包操作符才能保證賦的值不是nil。

3.3? 數(shù)組

數(shù)組是一種有序集合的數(shù)據(jù)類型脏嚷,使用”[ ]”創(chuàng)建骆撇,數(shù)組的第一個元素下標為0。

創(chuàng)建一個空數(shù)組:

3.4? 隱式解包可選類型

隱式解包可選類型是一個可選類型可以當作一個非可選類型數(shù)據(jù)父叙,不需要每次使用時對其進行解包神郊,在聲明類型后面使用”!”而不是”?”肴裙。

控制流

Swift有兩類控制流語句:1)條件語句,如if和switch涌乳;2)循環(huán)語句蜻懦,如for-in和while。

4.1? if語句

4.1.1? if語句嵌套在for-in語句內(nèi)

4.1.2? 在if語句中使用可選類型綁定檢查可選類型是否有值

如果可選類型的值是nil夕晓,條件判斷為false宛乃,將跳過if后面{}中的代碼。否則运授,可選類型的值被解包然后賦值給let后面的常量name烤惊。

4.1.3? 單個if語句可以綁定多個數(shù)據(jù)

添加where子句到條件判斷的語句中,下面如果所有數(shù)據(jù)綁定成功同時所有條件得到滿足吁朦,if語句會得到執(zhí)行柒室。

4.2? Switch語句

Swift的Switch語句十分強大,支持所有類型的數(shù)據(jù)和大范圍比較操作逗宜,不僅僅限于整數(shù)和等于比較雄右。下面switch語句在vegetable字符串上,比較各種狀況和執(zhí)行其匹配操作纺讲。

上面switch允許多個由”,”分隔的匹配狀況擂仍,與if語句不同,這些分隔狀況只要有一個得到滿足就會執(zhí)行匹配操作熬甚。switch語句的case子句中一旦執(zhí)行了匹配操作逢渔,其執(zhí)行完成后就會退出switch語句,因此case子句不需要調(diào)用break語句乡括。

switch語句必須保證至少有一個case子句得到執(zhí)行肃廓,因此有時需要提供default子句,當所有case子句沒有匹配執(zhí)行后诲泌,default子句會得到執(zhí)行操作盲赊。

4.3? for-in循環(huán)

使用范圍(Range)操作符

半開范圍操作符(..<)不執(zhí)行最高上標數(shù)值,上面代碼中i=4不會執(zhí)行敷扫,而閉合范圍操作符(…)會執(zhí)行最高上標數(shù)值哀蘑,下面循環(huán)會從0到4執(zhí)行5次,下劃線”_”表示泛匹配(wildcard)葵第。

函數(shù)和方法

5.1? 函數(shù)

函數(shù)是一種可重用的绘迁、命名的代碼片段,可用于程序中多個地方被調(diào)用卒密。使用func聲明一個函數(shù)缀台,函數(shù)聲明包含零個及以上的參數(shù),以name: Type的形式書寫栅受。函數(shù)可以有一個返回類型将硝,在尾部以->形式書寫,函數(shù)的實現(xiàn)部分在”{ }”里面屏镊。

調(diào)用這個函數(shù)時依疼,不用書寫第一個參數(shù)名稱,后面的參數(shù)需要書寫參數(shù)名稱而芥。

5.2? 方法

在特定類型中定義的函數(shù)稱為方法(methods)律罢,方法顯式的關聯(lián)于其所在定義的類型,只能在該類型或者類型的子類中被調(diào)用棍丐。下面例子中误辑,調(diào)用了String的方法hasSuffix。

調(diào)用方法使用點(“.”)語法歌逢,下面調(diào)用數(shù)組的insert方法巾钉。

類(Classes)和構造器(Initializers)

6.1? 類

在面向?qū)ο缶幊讨校绦虻男袨榇蠖鄶?shù)是基于對象之間的交互秘案,每個對象是一個類的一個實例砰苍。類通過屬性(properties)保存附加的信息,使用方法定義類本身的行為阱高。使用class聲明定義一個類赚导。屬性聲明和常量、變量的聲明一樣赤惊,寫在類的聲明定義中吼旧;同樣方法也和函數(shù)的聲明一樣寫在類的聲明定義中。下面例子聲明一個Share類未舟,擁有一個numberOfSides屬性和simpleDescription()方法圈暗。

下面例子創(chuàng)建Shape類的一個實例-shape對象,對其屬性賦值处面,調(diào)用方法simpleDescription()厂置。


6.2? 構造器

構造器是一個準備用來生成一個類實例的方法,其中有對美國屬性設置初始值和完成相關設置魂角。使用init聲明構造器昵济,下面例子定義一個新類NameShape。

不能直接使用init去調(diào)用構造器野揪,而是使用類名和其全部構造器的參數(shù)访忿。

6.3? 父類和子類

子類繼承父類的行為,子類中指向父類使用super斯稳,聲明一個子類和父類使用”:”海铆。子類的方法使用override重寫父類中同名的方法,如果沒有用override聲明的方法與父類的方法使用相同的名稱和參數(shù)挣惰,會報告編譯器錯誤卧斟;同樣使用override聲明的方法在父類中沒有對應的方法殴边,也會報告編譯器錯誤。下面例子定義Square類珍语,父類是NamedShape锤岸。

6.4? 失敗構造器(failable initializers)

有時對象的構造過程需要失敗處理,例如傳入的參數(shù)超出了指定的范圍板乙,或者缺少需要的數(shù)據(jù)是偷,這時不能成功初始化對象就要調(diào)用失敗構造器,失敗構造器能返回nil募逞,使用init?聲明一個失敗構造器蛋铆。

6.5? 聲明多個構造器

在類中,可以有多個關鍵字關聯(lián)聲明的構造器放接。特定(designated)構造器不需要任何關鍵字聲明刺啦,它是類的主構造器(primary initializer),類的其他構造器必須最終調(diào)用主構造器透乾。使用convenience關鍵字聲明的構造器洪燥,視為常規(guī)構造器,作為二級構造器用于增加類的附加行為或定制化工作乳乌,最終需要調(diào)用主構造器捧韵。類中使用required關鍵字聲明的構造器,表明該類和所有子類都要實現(xiàn)這個構造器汉操,并且在子類的這個構造器前也需要使用required關鍵字聲明再来。

6.6? 類型轉(zhuǎn)化(type casting)

類型轉(zhuǎn)化是一種檢查實例類型的方式,判斷一個實例是否是一個父類或者子類的實例對象磷瘤。類型轉(zhuǎn)化有兩個操作符:可選類型轉(zhuǎn)化操作符(as?)和強制類型轉(zhuǎn)化操作符(as!)芒篷,可選類型轉(zhuǎn)化操作符返回一個可選類型數(shù)據(jù),這個數(shù)據(jù)可以是空(nil)表明轉(zhuǎn)化失敗采缚,強制類型轉(zhuǎn)化操作符使用在轉(zhuǎn)化結果總是成功针炉,如果失敗則觸發(fā)運行時錯誤。下面例子顯示使用可選類型轉(zhuǎn)化操作符(as?)檢查數(shù)組中的每個shape是square或者triangle扳抽。

枚舉和結構體

在Swift語言中篡帕,類不是定義數(shù)據(jù)類型的唯一方式,枚舉和結構體具有和類相似的能力贸呢。

7.1? 枚舉

枚舉可以定義一組普通類型的镰烧、相關聯(lián)的數(shù)據(jù),枚舉的使用是一種類型安全(type-safe)楞陷,枚舉可以有自己的方法怔鳖。使用enum創(chuàng)建一個枚舉數(shù)據(jù)。

上面例子中固蛾,枚舉的raw-value類型是Int结执,定義第一個rawvalue的數(shù)值度陆,后面的rawvalue會自動遞增加1。枚舉的raw-value類型也可以使用字符串或者浮點數(shù)献幔。

7.2? 結構體

結構體支持類的大多數(shù)行為坚芜,包括方法和構造器。結構體和類的一個最重要的不同在于:結構體總是傳數(shù)值方式被使用斜姥,而類是傳引用方式。結構體適用于定義輕量的數(shù)據(jù)類型沧竟,不需要像繼承和類型轉(zhuǎn)化這些能力铸敏。使用struct創(chuàng)建一個結構體。

協(xié)議

協(xié)議定義了一些方法悟泵、屬性和其他實現(xiàn)指定任務和功能的藍圖杈笔,并不實際提供任何實際的實現(xiàn)。類糕非、結構體和枚舉可以遵循協(xié)議蒙具,提供實際實現(xiàn)。使用protocol聲明一個協(xié)議朽肥。

上面例子中禁筏,{ get }在simpleDescription屬性后面,表明該屬性是只讀的衡招。

類篱昔、結構體和枚舉使用“類名: 協(xié)議名”的形式遵循一個協(xié)議,當需要遵循多個協(xié)議同時聲明一個父類時始腾,父類需要在第一個位置州刽,如“子類名: 父類, 協(xié)議1, 協(xié)議2, …, 協(xié)議n”。下面例子浪箭,SimpleClass遵循ExampleProtocol協(xié)議穗椅,提供實現(xiàn)simpleDescription屬性和adjust方法。

協(xié)議是第一級類型奶栖,可以與其他命名的類型相似匹表,可以創(chuàng)建協(xié)議實例。下面例子驼抹,創(chuàng)建ExampleProtocol數(shù)組桑孩,并對數(shù)組中的實例依此調(diào)用adjust方法。

Swift語言和Cocoa Touch

Cocoa Touch是蘋果開發(fā)iOS應用的框架集合框冀,Swift語言提供與Cocoa Touch無縫的互操作能力流椒。

iOS應用開發(fā)最常見的框架就是UIKit,在Swift語言使用UIKit框架的方法

下面是創(chuàng)建一個紅色的正方形視圖明也。

10.? Swift Playground界面

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宣虾,一起剝皮案震驚了整個濱河市惯裕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绣硝,老刑警劉巖蜻势,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鹉胖,居然都是意外死亡酒朵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門男图,熙熙樓的掌柜王于貴愁眉苦臉地迎上來婴谱,“玉大人,你說我怎么就攤上這事寂诱》髌唬” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵痰洒,是天一觀的道長瓢棒。 經(jīng)常有香客問我,道長丘喻,這世上最難降的妖魔是什么脯宿? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮泉粉,結果婚禮上嗅绰,老公的妹妹穿的比我還像新娘。我一直安慰自己搀继,他們只是感情好窘面,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叽躯,像睡著了一般财边。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上点骑,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天酣难,我揣著相機與錄音,去河邊找鬼黑滴。 笑死憨募,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的袁辈。 我是一名探鬼主播菜谣,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了尾膊?” 一聲冷哼從身側(cè)響起媳危,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎冈敛,沒想到半個月后待笑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡抓谴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年暮蹂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片癌压。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡椎侠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出措拇,到底是詐尸還是另有隱情,我是刑警寧澤慎宾,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布丐吓,位于F島的核電站,受9級特大地震影響趟据,放射性物質(zhì)發(fā)生泄漏券犁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一汹碱、第九天 我趴在偏房一處隱蔽的房頂上張望粘衬。 院中可真熱鬧,春花似錦咳促、人聲如沸稚新。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽褂删。三九已至,卻和暖如春冲茸,著一層夾襖步出監(jiān)牢的瞬間屯阀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工轴术, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留难衰,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓逗栽,卻偏偏與公主長得像盖袭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

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