個人Swift 3入門筆記(1) | 不一樣的開始

不一樣的開始

好吧乏屯,你打開這篇文章說明你對Swift有一定了解疫铜,我就不廢話告訴你這是什么玩意了。

盡管Swift的“用武之地”主要是開發(fā)IOS或者macOS應用辙浑,但是它在Web開發(fā)方面也不遜色于傳統(tǒng)的Web端開發(fā)語言,盡管性能與Golang等相比有一定差距衷蜓,但是Swift的優(yōu)勢在于你可以學習一門語言就能完成從桌面端累提、移動端、服務器端的全部后端開發(fā)工作恍箭。當然桌面端和移動端僅限蘋果產(chǎn)品刻恭。也就是說如果你的產(chǎn)品集中在蘋果平臺瞧省,Swift大概是個不二的選擇扯夭。

除此之外讓人想用Swift來開發(fā)Web端的另一個原因是Swift的語法讓人感覺舒服。就開發(fā)效率來說鞍匾,個人認為是可以媲美Python交洗、Ruby的。

蘋果平臺安裝Swift我就不廢話了橡淑,Windows和Linux的話也是解壓就能用构拳,沒什么好說的。

因為是教程梁棠,所以使用Docker安裝不同版本的Swift置森,以便更好地控制版本,比較版本之間的差異符糊。


運行 Swift 的 Docker 鏡像

首先凫海,我們需要Swift開發(fā)環(huán)境,本文使用Docker構(gòu)建一個用于Swift簡單開發(fā)的在線IDE(基于Cloud9 IDE)男娄。

安裝Docker不廢話行贪,一句話:

curl -sSL https://get.docker.com/ | sh

安裝好Docker之后使用下面這句話就可以啟動一個用于Swift開發(fā)的容器了。自己改用戶名密碼模闲。

docker run -d -it --privileged=true --name=cloud9 -v ~/workspace:/root/workspace -p 8181:8181 zuolan/swift-ide --auth username:password
運行成功后的界面

如果你想自己構(gòu)建一個鏡像建瘫,這份 Dockerfile 可以在Github找到。

Dockerfile

FROM ubuntu:trusty
MAINTAINER ZuoLan <i@zuolan.me>

# If you use Swift package, may be need install libicu-dev, so you can use libicu-dev instead of libicu52.
ENV buildDeps="make build-essential g++ gcc curl ca-certificates git" c9Deps="nodejs" swiftDeps="curl python-dev libedit2 clang libicu52 libxml2"

# Install Cloud9-ide
RUN apt-get update && apt-get upgrade -y \
 && apt-get install -y $buildDeps --no-install-recommends \
 && curl -sL https://deb.nodesource.com/setup_4.x | sudo bash - \
 && apt-get -y install $c9Deps $swiftDeps \
 && npm install -g forever && npm cache clean \
 && git clone https://github.com/c9/core.git /cloud9 && cd /cloud9 \
 && scripts/install-sdk.sh \

# Install Swift
 && cd /usr/local/ \
 && curl -o swift.tar.gz -sL https://swift.org/builds/swift-3.0-release/ubuntu1404/swift-3.0-RELEASE/swift-3.0-RELEASE-ubuntu14.04.tar.gz \
 && tar xzf swift.tar.gz && mv swift-3.0-RELEASE-ubuntu14.04 swift && rm /usr/local/swift.tar.gz \
 && echo 'export PATH=/usr/local/swift/usr/bin:"${PATH}"' >> ~/.bashrc \
 && apt-get autoremove -y $buildDeps \
 && apt-get autoremove -y && apt-get autoclean -y && apt-get clean -y \
 && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
 && npm cache clean
VOLUME /root/workspace
ENV workspace /root/workspace
EXPOSE 8181 
ENTRYPOINT ["forever", "/cloud9/server.js", "-w", "/root/workspace", "-l", "0.0.0.0"]

#CMD["--auth","username:password"]

使用包管理器

雖然是新手尸折,但是基本的概念還是沒問題的對吧啰脚?

$ mkdir swift             # 新建一個文件夾
$ cd swift
$ swift package init      # 初始化項目
$ tree                    # 看一下項目目錄結(jié)構(gòu)
.
|-- Package.swift
|-- Sources
|   `-- swift.swift
`-- Tests
    |-- LinuxMain.swift
    `-- swiftTests
        `-- swiftTests.swift

3 directories, 4 files
$ swift build             # 構(gòu)建項目
$ swift test              # 測試項目

構(gòu)建可執(zhí)行文件

再新建一個項目吧!~

$ mkdir swift-ex                                        # 新建一個文件夾
$ cd swift-ex
$ swift package init --type executable                  # 初始化項目
$ swift build
Creating executable package: swift-ex
Creating Package.swift
Creating .gitignore
Creating Sources/
Creating Sources/main.swift
Creating Tests/
$ swift build
Compile Swift Module 'swift_ex' (1 sources)
Linking ./.build/debug/swift-ex
$ ./.build/debug/swift-ex                                # 執(zhí)行可執(zhí)行文件
Hello, world!

這樣第一個Hello World項目就出來了实夹。

使用多個源文件

再來一個多文件的項目拣播,算熟悉一下這些工具吧,反正還沒正式開始進入學習呢收擦。
編輯一個文件:$ vi Greeter.swift
這里使用vi編輯器是因為在Linux環(huán)境下啊贮配,教程基礎(chǔ)部分都是在Linux下操作的,一個編輯器而已塞赂,不用在意泪勒。

文件內(nèi)容:

func sayHello(name: String) {
    print("Hello, \(name)!")
}

再編輯一個文件:$ vi main.swift,內(nèi)容如下:

if CommandLine.arguments.count != 2 {
    print("Usage: hello NAME")
} else {
    let name = CommandLine.arguments[1]
    sayHello(name: name)
}

www(笑),現(xiàn)在就可以構(gòu)建了圆存,然后運行一下叼旋,第二個Hello World項目達成。

$ swift build
Compile Swift Module 'swift_ex' (2 sources)
Linking /root/workspace/swift-ex/.build/debug/swift-ex
$ /root/workspace/swift-ex/.build/debug/swift-ex zuolan
Hello, zuolan!

使用LLDB調(diào)試器

調(diào)試這個看看就好沦辙,以后還會遇到夫植。
編輯文件:$ vi Factorial.swift

func factorial(n: Int) -> Int {
    if n <= 1 { return n }
    return n * factorial(n: n - 1)
}

let number = 4
print("\(number)! is equal to \(factorial(n: number))")

編譯一下:
$ swiftc -g Factorial.swift

看一下文件目錄結(jié)構(gòu):

~/workspace/swift-ex/Sources $ tree
.
|-- Factorial
|-- Factorial.swift
|-- Greeter.swift
`-- main.swift

0 directories, 4 files

關(guān)于更多LLDB的命令可以在 LLDB Tutorial 中查閱。

進入調(diào)試模式:

$ lldb Factorial
(lldb) target create "Factorial"
Current executable set to 'Factorial' (x86_64).

(lldb) b 2
Breakpoint 1: where = Factorial`Factorial.factorial (n : Swift.Int) -> Swift.Int + 12 at Factorial.swift:2, address = 0x00000000004010ac

(lldb) r
Process 1834 launched: '/root/workspace/swift-ex/Sources/Factorial' (x86_64)
Process 1834 stopped
* thread #1: tid = 1834, 0x00000000004010ac Factorial`factorial(n=4) -> Int + 12 at Factorial.swift:2, name = 'Factorial', stop reason = breakpoint 1.1
    frame #0: 0x00000000004010ac Factorial`factorial(n=4) -> Int + 12 at Factorial.swift:2
   1    func factorial(n: Int) -> Int {
-> 2        if n <= 1 { return n }
   3        return n * factorial(n: n - 1)
   4    }
   5   
   6    let number = 4
   7    print("\(number)! is equal to \(factorial(n: number))")

(lldb) p n

(Int) $R0 = 4

(lldb) p n * n

(Int) $R1 = 16

(lldb) bt
* thread #1: tid = 1834, 0x00000000004010ac Factorial`factorial(n=4) -> Int + 12 at Factorial.swift:2, name = 'Factorial', stop reason = breakpoint 1.1
  * frame #0: 0x00000000004010ac Factorial`factorial(n=4) -> Int + 12 at Factorial.swift:2
    frame #1: 0x0000000000400fda Factorial`main + 282 at Factorial.swift:7
    frame #2: 0x00007ffff6e6bf45 libc.so.6`__libc_start_main + 245
    frame #3: 0x0000000000400df9 Factorial`_start + 41

(lldb) c
Process 1834 resuming
Process 1834 stopped
* thread #1: tid = 1834, 0x00000000004010ac Factorial`factorial(n=3) -> Int + 12 at Factorial.swift:2, name = 'Factorial', stop reason = breakpoint 1.1
    frame #0: 0x00000000004010ac Factorial`factorial(n=3) -> Int + 12 at Factorial.swift:2
   1    func factorial(n: Int) -> Int {
-> 2        if n <= 1 { return n }
   3        return n * factorial(n: n - 1)
   4    }
   5   
   6    let number = 4
   7    print("\(number)! is equal to \(factorial(n: number))")

(lldb) p n

(Int) $R2 = 3

(lldb) br di
All breakpoints disabled. (1 breakpoints)

(lldb) c
Process 1834 resuming
4! is equal to 24
Process 1834 exited with status = 0 (0x00000000) 

(lldb) ^D
~/workspace/swift-ex/Sources $

最后一部分沒什么好看的油讯,剛開始基本用不上详民。


這是第一篇咯 | 下一篇:常量和變量


目錄

  1. 不一樣的開始
  2. 常量和變量
  3. 基本數(shù)據(jù)類型
  4. 可選型
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市陌兑,隨后出現(xiàn)的幾起案子沈跨,更是在濱河造成了極大的恐慌,老刑警劉巖兔综,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饿凛,死亡現(xiàn)場離奇詭異,居然都是意外死亡软驰,警方通過查閱死者的電腦和手機涧窒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锭亏,“玉大人纠吴,你說我怎么就攤上這事》×停” “怎么了呜象?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長碑隆。 經(jīng)常有香客問我恭陡,道長,這世上最難降的妖魔是什么上煤? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任休玩,我火速辦了婚禮,結(jié)果婚禮上劫狠,老公的妹妹穿的比我還像新娘拴疤。我一直安慰自己,他們只是感情好独泞,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布呐矾。 她就那樣靜靜地躺著,像睡著了一般懦砂。 火紅的嫁衣襯著肌膚如雪蜒犯。 梳的紋絲不亂的頭發(fā)上组橄,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音罚随,去河邊找鬼玉工。 笑死,一個胖子當著我的面吹牛淘菩,可吹牛的內(nèi)容都是我干的遵班。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼潮改,長吁一口氣:“原來是場噩夢啊……” “哼狭郑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起进陡,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤愿阐,失蹤者是張志新(化名)和其女友劉穎微服,沒想到半個月后趾疚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡以蕴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年糙麦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丛肮。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡赡磅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宝与,到底是詐尸還是另有隱情焚廊,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布习劫,位于F島的核電站咆瘟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏诽里。R本人自食惡果不足惜袒餐,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谤狡。 院中可真熱鬧灸眼,春花似錦、人聲如沸墓懂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捕仔。三九已至匕积,卻和暖如春佛嬉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闸天。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工暖呕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人苞氮。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓湾揽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親笼吟。 傳聞我的和親對象是個殘疾皇子库物,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件贷帮、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評論 4 62
  • 未成年便離家的小孩一轉(zhuǎn)眼已“遠在天邊”多年戚揭。磕磕絆絆中吃了些苦頭撵枢,繞了些遠路民晒,當真是活生生的用生命中驗證了“長大就...
    希麗亞閱讀 461評論 0 2
  • 大概是因為年輕的緣故,劉白剖腹產(chǎn)恢復得比較好锄禽,兩天就辦理了出院手續(xù)潜必。出院前,婆婆帶著兒子注射了乙肝疫苗和免疫球蛋白...
    歲月女神偷閱讀 427評論 0 2
  • 祭奠我們身邊漸漸消逝的真情 “在六十多年的歲月里沃但,你像蠟燭一樣照亮了我磁滚,犧牲了自己,我拖累你宵晚,我很愧疚垂攘,更是傷心…...
    一點一刻閱讀 266評論 0 0