為了表示我對(duì)簡(jiǎn)書『飽醉豚』事件的不滿,簡(jiǎn)書不再更新,后續(xù)有文章只更新 個(gè)人博客和 掘金
本文首發(fā)于我的個(gè)人博客
引言
Swift編程語(yǔ)言,支持多編程范式和編譯式,用來(lái)撰寫基于macOS/OS X、iOS、watchOS和tvOS的軟件。 蘋果公司于2014年在蘋果開發(fā)者年會(huì)(WWDC)發(fā)布了Swift編程語(yǔ)言。從設(shè)計(jì)上蘋果公司讓Swift與Objective-C共存在蘋果公司的操作系統(tǒng)上
蘋果宣稱Swift的特點(diǎn)是:快速、現(xiàn)代、安全、互動(dòng),而且明顯優(yōu)于Objective-C語(yǔ)言。Swift以LLVM編譯,可以使用現(xiàn)有的Cocoa和Cocoa Touch框架。Xcode Playgrounds功能是Swift為蘋果開發(fā)工具帶來(lái)的最大創(chuàng)新,該功能提供強(qiáng)大的互動(dòng)效果,能讓Swift源代碼在撰寫過程中能即時(shí)顯示出其運(yùn)行結(jié)果
2015年6月8日,蘋果于WWDC2015上宣布,Swift將開放源代碼,包括編譯器和標(biāo)準(zhǔn)庫(kù)
2015年12月3日,蘋果宣布開源Swift,并支持Linux,蘋果在新網(wǎng)站Swift.org和托管網(wǎng)站Github上開源了Swift,但蘋果的app store并不支持開源的Swift,只支持蘋果官方的Swift版本,官方版本會(huì)在新網(wǎng)站Swift.org上定期與開源版本同步
之前由于每個(gè)版本都不兼容,所以對(duì)開發(fā)者不友好,每次新版本,就像學(xué)了一門新的語(yǔ)言。但是從Swift5開始,API終于穩(wěn)定下來(lái)了??梢詠?lái)總結(jié),學(xué)習(xí)一下Swift了。
一些基本操作
- 生成語(yǔ)法樹: Swiftc -dump-ast main.Swift
- 生成最簡(jiǎn)潔的SIL代碼:Swiftc -emit-sil main.Swift
- 生成LLVM IR代碼: Swiftc -emit-ir main.Swift -o main.ll
- 生成匯編代碼: Swiftc -emit-assembly main.Swift -o main.s
基礎(chǔ)語(yǔ)法
- 不用編寫main函數(shù),Swift將全局范圍內(nèi)的首句可執(zhí)行代碼作為程序入口
- 一句代碼尾部可以省略分號(hào)(;)
- 多句代碼寫到同一行時(shí)必須用分號(hào)(;)隔開
- 用var定義變量,let定義常量,編譯器能自動(dòng)推斷出變量\常量的類型
- Playground可以快速預(yù)覽代碼效果,是學(xué)習(xí)語(yǔ)法的好幫手
- Command + Shift + Enter: 運(yùn)行整個(gè)Playground
- Shift + Enter:運(yùn)行截止到某一行代碼
例如
var a = 10
a = 20
let b = 88
let c = 12 ; let d = 40
print(d)
創(chuàng)建對(duì)象,例如view視圖,控制器等也更簡(jiǎn)單
注釋
和OC一樣,有單行注釋,多行注釋
例如
// 單行注釋
/*
多行注釋
*/
但是,Swift中增加了,注釋的嵌套,比如這樣是可以的
/*
多行注釋
/*
// 單行注釋
嵌套多行注釋
*/
*/
Playound的注釋是支持markup(類似Markdown)語(yǔ)法的
- 開啟markup:Editor->Show Rendered Markup
- 只能在Playground中使用
常量
- 只能賦值1次
- 常量的值不要求在編譯的時(shí)候確定,只要在使用之前賦值一次就可以了
例如下面都是可以的
var num = 10
num += 20
num += 30
let age = num
print(age)
func getAge() -> Int {
return 10
}
let age2 = getAge()
print(age2)
但是下面這種是不可以的,因?yàn)樵诔跏蓟?,是不可以使用?/p>
let number: Int
print(number)
當(dāng)然了,這種也是不行的
let number
number = 25
標(biāo)識(shí)符
比如常量名,變量名,函數(shù)名等標(biāo)識(shí)符
- 標(biāo)識(shí)符不能數(shù)字開頭,不能包含空白字符,制表符,箭頭燈特殊字符。
- 除此之外,幾乎可以使用任何字符。
常見數(shù)據(jù)類型
- 值類型(value type)
- 枚舉(enum): optional
- 結(jié)構(gòu)體(struct): Float、 Double、Float、Int、Character、String、Array、Dictionary、Set
- 引用類型(reference type)
- 類(class)
類型轉(zhuǎn)換
不同類型之間的轉(zhuǎn)換,比如
// 整數(shù)轉(zhuǎn)換
let a: UInt16 = 2_000
let b: UInt8 = 10
let c = a + UInt16(b)
print(c)
//整數(shù)和浮點(diǎn)數(shù)轉(zhuǎn)換
let intNumber = 3
let doubleNumber = 0.1415926
let pi = Double(intNumber) + doubleNumber
let intPi = Int(pi)
// 字面量可以直接相加,因?yàn)樽置媪繘]有明確的類型
let res = 3 + 2.565
元組
元祖可以把多個(gè)值保存在一起
格式: (數(shù)值1, 數(shù)值2, 數(shù)值3)
let numbers = (10, 20, 30)
// 可以通過索引訪問
numbers.0
numbers.1
numbers.2
元祖中還可以保存不同的數(shù)據(jù)類型的值
let person = (name: "lnj", age: 30, score: 100.0)
// 可以通過名稱訪問
person.name
person.age
person.score
我們甚至可以這樣子
// 相當(dāng)于同時(shí)定義了三個(gè)變量
let (name, age, score) = ("lnj", 30, 80)
name
age
score
參考資料: