Swift 十二講 前言和第一章(draft)

前言

Swift是蘋果公司于2014年六月宣布的最新編程語言。主要開發(fā)者是Chris Lattner。這是蘋果的軟件開發(fā)系統(tǒng)多年來最重要的一個(gè)更新。在可以預(yù)見的將來,整個(gè)蘋果的軟件開發(fā)系統(tǒng),都會(huì)往Swift傾斜和逐步遷移。所以任何一個(gè)對(duì)蘋果軟件系統(tǒng)有興趣的人,都應(yīng)該花時(shí)間學(xué)習(xí)Swift。

更重要的是,Swift是一個(gè)好語言! 它綜合了許多現(xiàn)代編譯和計(jì)算機(jī)語言的最新技術(shù)。吸收了很多其他語言的優(yōu)點(diǎn)和長(zhǎng)處。任何一個(gè)對(duì)現(xiàn)代編譯技術(shù)和計(jì)算機(jī)語言有興趣的人,也應(yīng)該花時(shí)間看下Swift的基本內(nèi)容和發(fā)展。

Swift包含很強(qiáng)大的類型推斷,這樣程序員很多情況下,可以像腳本那樣寫程序,而不需指定類型。但Swift是靜態(tài)類型語言,這確保了程序的速度。Swift還包含簡(jiǎn)明實(shí)用closure,protocol,generics以及不少functional programming語言的特征等等。因?yàn)槿嬷С謚nicode, Swift是筆者所知的,第一種支持變量名用中文的現(xiàn)代語言。在Internet很多著名的blogger都認(rèn)為Swift包括的特征太多,難以段時(shí)間內(nèi)分析詳盡。但是沒有人否定Swift會(huì)給開發(fā)者帶來極大便利,會(huì)從整體上促進(jìn)app開發(fā)的效率。

眾所周知,之前apple的軟件系統(tǒng)語言是objective-C?,F(xiàn)在很多人有個(gè)疑問,未來Swift和objective-C關(guān)系的發(fā)展趨勢(shì)是什么?筆者個(gè)人認(rèn)為,Swift和Objective-C的關(guān)系未來會(huì)像80年代的C和匯編的關(guān)系。很多底層內(nèi)容仍然需要Objective-C,但用到Objective-C的地方會(huì)越來越少??紤]到Internet對(duì)知識(shí)傳播的速度提升,這個(gè)過程會(huì)很快。所以Apple的app開發(fā)人員需要盡快學(xué)習(xí)Swift,盡早完成產(chǎn)品遷移。目前,Swift可以和Objective-C混合編寫app,并且apple的API都是既有Objective-C封裝,又有Swift封裝。所以現(xiàn)在生產(chǎn)成功的純的或者混合Swift app產(chǎn)品,已經(jīng)非常方便。唯一缺憾是,相對(duì)于Objective-C來講,Swift的開源代碼,控件和學(xué)習(xí)資料還相對(duì)較少。這需要程序員群體集體的逐步積累。

最后,Swift是一種還在發(fā)展中的語言,未來可能會(huì)有一些變化。另外,據(jù)說Swift沒有被用來開發(fā)過大型類庫。所以只有經(jīng)過開發(fā)者群體的集體實(shí)踐,才能最終明確Swift的優(yōu)劣點(diǎn)??紤]到這點(diǎn),筆者不建議在Swift非常偏僻的語法部分花太多時(shí)間。本書只集中精力介紹作者認(rèn)為最有用的,而且未來一定會(huì)有用的那部分Swift語法。這當(dāng)然和個(gè)人品味有關(guān),也希望讀者留言提出建議。

第一章 試一下Swift+最基本的文本要素

a. 機(jī)器和環(huán)境

假設(shè)你有一臺(tái)蘋果電腦,并且安裝了Xcode 6.1以上以及OSX 10.9以上的版本。有四種方法可以快速嘗試用一下swift:

  1. 打開Xcode,點(diǎn)擊文件,選 New project,選Swift語言
    如果你沒從事過IOS或者OSX編程,不推薦這種方式試用Swift。
    因?yàn)橐粋€(gè)項(xiàng)目里的過多元素會(huì)分散精力。

  2. 打開Xcode,選New playground
    這是筆者最推薦的方式。你可以保存一個(gè)空的playground放在桌面,經(jīng)常練習(xí)使用。

  3. 創(chuàng)建一個(gè)Swift腳本,在OS X的terminal端運(yùn)行。
    step 1:在一個(gè)文本文件里,輸入以下兩行
    #!/usr/bin/swift
    println("哈哈哈")
    step 2:把文本文件保存為1.swift
    step 3:用如下命令行把1.swift標(biāo)記為可執(zhí)行
    chmod u+x hello.swift
    step 4:用如下命令運(yùn)行1.swift
    ./1.swift

  4. 使用OS X的Swift Read-Evaluate-Print-Loop (REPL)
    在terminal運(yùn)行如下命令:
    xcrun swift
    如果你此前從未打開過Xcode,它會(huì)報(bào)錯(cuò)。再次輸入上次的命令,會(huì)彈出一個(gè)窗口讓你輸入用戶名和密碼。輸入正確的用戶名和密碼后,即可用命令行方式使用Swift
    [添加圖片]

b. Playground 再強(qiáng)調(diào)和一些小實(shí)驗(yàn)

按照Chris Lattner, Playground(http://nondot.org/sabre/) 受到Bret Victor的想法(http://worrydream.com/#!/LearnableProgramming) 以及軟件light table的影響。你一邊寫程序的同時(shí),在另半邊可以看到當(dāng)前的結(jié)果。這樣會(huì)對(duì)你的思考流程有幫助,所以對(duì)你的效率和代碼質(zhì)量都有相當(dāng)?shù)奶嵘_@一想法的正確與否,可能是因人而異的,這就像有人寫作喜歡開markdown編輯器的右邊顯示板,有人不喜歡一樣。但筆者鼓勵(lì)每個(gè)讀者都試驗(yàn)一下。本講座會(huì)多數(shù)時(shí)間用Playground,而不是println來

    let 小狗 = 1
    let b = 10
    println(小狗+b)

如上述代碼,變量名可以用中文(實(shí)際上所有的identifiers都可以用中文)。另外因?yàn)镾wift有類型推斷,你不需要指定類型。上段代碼的輸出是11。

extension Int
{func neg() -> Int
{return -self}
}
var a=1
println(a.neg())

Swift允許對(duì)類型進(jìn)行擴(kuò)展。甚至對(duì)內(nèi)建的基本類型,例如整型Int,也可以。上面這段代碼擴(kuò)展了整型,給整型添加了一個(gè)成員函數(shù)neg。這個(gè)函數(shù)返回這個(gè)整數(shù)的負(fù)。上面這段代碼的輸出是-1。

import UIKit

var uiButton    = UIButton.buttonWithType(UIButtonType.System) as UIButton
 uiButton.frame  = CGRectMake(0, 0, 100, 100)
 uiButton.backgroundColor = UIColor.yellowColor()
 uiButton.setTitle("黃按鈕", forState: UIControlState.Normal);

在Playground輸入以上代碼,點(diǎn)開顯示欄的timeline,你會(huì)在顯示區(qū)看到一個(gè)黃按鈕。這個(gè)例子充分顯示了Playground的設(shè)計(jì)理念。就是你在寫代碼的同時(shí),顯示區(qū)顯示出來代碼會(huì)帶來的效果。讀者可以再試一下下面的例子:

let sineArraySize = 200

let frequency1 = 4.0
let phase1 = 0.0
let amplitude1 = 12.0
let sineWave = (0..<sineArraySize).map {
    amplitude1 * sin(2.0 * M_PI / Double(sineArraySize) *    Double($0) * frequency1 + phase1)
}

相信通過上面幾個(gè)例子,讀者已經(jīng)可以初步體會(huì)Swift的強(qiáng)大簡(jiǎn)介,以及Playground的一些優(yōu)點(diǎn)。筆者認(rèn)為,如果有開源社區(qū)的充分支持,Playground甚至?xí)蔀橐粋€(gè)數(shù)值分析計(jì)算的強(qiáng)大工具。Swift寫起來并不比Matlab難多少。但同時(shí)又兼具類型安全編譯語言的優(yōu)點(diǎn)。

c. 基本文本要素:空格,注釋,分號(hào),import

  • Swift的空格被用來分隔基本的代碼原子符號(hào),不然空格被忽略。
    
    
      let a = 1
    

let a 
=
1

是一樣的效果。

  • Swift用//來注釋一行。用一對(duì)/****/注釋一塊代碼。
    /** **/中可以包括別的/****/對(duì)。

  • Swift中行末尾不要求寫分號(hào)。但你也可以寫來表示這是一行代碼的末尾。這樣一行文字中就可以包含多行代碼。

  • Swift不用頭文件和#include。它使用import命令來引入已經(jīng)定義好的模塊中的public部分。例如:
    import UIKit //引入全部模塊
    import Foundation.NSDate //引入一個(gè)模塊中的一部分
    import func Darwin.sqrt //引入一個(gè)模塊的一個(gè)函數(shù)
    類似于函數(shù),一個(gè)模塊中的類,結(jié)構(gòu),變量等等,也都可以單獨(dú)引入。
    OSX開發(fā)最常用的模塊是Cocoa。IOS則是UIKit。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,352評(píng)論 4 61
  • 李文星事件,我跟著新聞看了很久,想起了一些舊事,心頭漫過一陣陣的酸痛。我不知道,還會(huì)有多少人會(huì)身陷傳銷,只是這樣的...
    幽小窗閱讀 626評(píng)論 96 36
  • 276期,感謝1組成員 【日精進(jìn)打卡第114天】 【知~學(xué)習(xí)】 《六項(xiàng)精進(jìn)》讀0遍 共77遍 《六項(xiàng)精進(jìn)》背0遍 ...
    周晨i閱讀 233評(píng)論 0 0
  • 摘自:http://jinnianshilongnian.iteye.com/blog/1413851 詳解IoC...
    會(huì)點(diǎn)代碼的大叔閱讀 2,659評(píng)論 1 0
  • 喜歡一句話: “你住的城市下雨了,很想問你有沒有帶傘。 可是我忍住了,因?yàn)槲遗履阏f沒帶, 而我又無能為力。” 喜歡...
    半杯清風(fēng)閱讀 727評(píng)論 0 3

友情鏈接更多精彩內(nèi)容