Swift是Apple
在2014年6月WWDC
發(fā)布的全新編程語言,中文名和LOGO是”雨燕“
Swift之父是Chris Lattner
,也是Clang
編譯器的作者,LLVM
項目的主要發(fā)起人
Swift歷時七年,從Swift 1.*
更新到Swift 5.*
,經(jīng)歷了多次重大改變,ABI
終于穩(wěn)定
API(Application Programming Interface):應用程序編程接口
ABI(Application Binary Interface):應用程序二進制接口
Swift是完全開源的,下載地址:https://github.com/apple/swift
LLVM編譯器一般分為前端和后端
我們知道OC的前端是通過Clang
進行編譯的,Swift的前端是通過swiftc
來編譯的
不同語言的前端可能不同,但最終都會通過編譯器的后端生成對應平臺的二進制代碼
整個編譯流程如下圖所示
關(guān)于Swift編譯流程的詳細講解可以參考以下網(wǎng)址:https://swift.org/swift-compiler/#compiler-architecture
我們打開終端,輸入swiftc -help
,會打印出相關(guān)指令,這也說明了swiftc
已經(jīng)存在于Xcode中
我們可以在應用程序中找到Xcode
,然后右鍵顯示包內(nèi)容
,通過該路徑找到swiftc
路徑:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
下面我們可以通過一些swiftc
的一些基本操作來了解
1.我們先新建一個Swift的命令行項目
2.然后打開終端,cd
到main.swift
路徑
3.然后我們輸入swiftc -dump-ast main.swift
,來查看下生成的語法樹
4.我們還可以輸入swiftc -emit-sil main.swift
生成最簡潔的SIL代碼
5.我們還可以輸入swiftc -emit-ir main.swift
生成LLVM IR中間代碼
6.我們還可以輸入swiftc -emit-assembly main.swift
生成匯編代碼
Swift中打印輸入:print("Hello World")
Swift中一句代碼是可以省略分號的,但是如果多句代碼寫在一行,需要用分號隔開
Swift不用編寫main函數(shù)
,會以全局范圍內(nèi)的首句可執(zhí)行代碼作為入口來執(zhí)行
通過反匯編我們可以看到底層會執(zhí)行main函數(shù)
常量:
1.用let
定義常量,常量只能賦值一次
不用特意指明類型,編譯器會自動進行推斷
let a: Int = 10
let b = 20
2.它的值不要求在編譯過程中確定,但使用之前必須賦值一次
這樣寫確定了a的類型,之后再去賦值,也不會報錯
let a: Int
a = 10
用函數(shù)給常量賦值也可以,函數(shù)是在運行時才會確定值的,所以只要保證使用之前賦值了就行
func getNumber() -> Int {
return 10
}
let a: Int
a = getNumber()
如果沒有給a確定類型,也沒有一開始定義的時候賦值,就會像下面這樣報錯
變量:
1.用var
定義變量
var b = 20
b = 30
2.常量、變量在初始化之前,都不能使用
1.Swift中有單行注釋和多行注釋
注釋之間嵌套也沒有問題
// 單行注釋
/*
多行注釋
/*
多行注釋
*/
/*
// 注釋嵌套
*/
2.Playground
里的注釋支持Markup
語法(同Markdown)
Markup
語法只在Playground
里有效,在項目中無效
//: # 一級標題
/*:
## 基礎(chǔ)語法
*/
可以通過Editor -> Show Raw Markup
來預覽
預覽的效果如下
1.標識符(比如常量名、變量名、函數(shù)名)幾乎可以使用任何字符
let