筆記正文:
2010年7月開始設計,2014年wwdc(蘋果開發者大會)上發佈,譯爲:「雨燕」,能夠跟object-c同樣,用於開發iOS,Mac應用程序。
特色:
從中能夠看到Objective-C,JavaScript,C#,Python等語言的影子;
借鑑了上面這些語言的優勢;
同時具有編譯型語言的高性能和腳本語言的靈活交互性;
能夠輕鬆地與Objective-C、C混合使用(相互調用)。
開發的目的:取代Objective-C;讓應用開發更簡單、更高效、更穩定。
相關數據:
使用Swift語言開發的條件是什麼:
Xcode版本>=6.0;
Mac版本>=10.9.3
Swift自從發佈以後,備受開發者關注,發佈當天(1天的時間內)
Xcode 6 beta下載量突破1400萬次;
官方發佈的電子書《The Swift Prongramming Language》下載量突破37萬次;
一個國外開發者使用Swift實現了Flappy Bird遊戲(這位開發者上手Swift的時間只有4個小時,編程加上休息時間,接近9個小時)。
相關人物:Chris Lattner
Swift的首席架構師;LLVM項目的主要發起人與做者之一;Clang編譯器的做者;蘋果[開發工具]部門的主管;領導Xcode、Instruments和編譯器團隊;2010年7月開始住到開發Swift編程語言;Swift的大部分基礎架構均由他1人完成。 ————大神中的大神
性能:
官方給出的是性能很是好,可是對此表示懷疑???
忠告:
目前的性能不是卡開發者最須要擔憂的問題;
蘋果已經全盤掌握了這個語言的方方面面:從底層編譯框架再到語言設計;
優化之路纔剛剛開始,做爲開發者,須要給這門新語言一點點耐心和信心
Swift和Objective-C代碼格式對比
添加一個按鈕爲例:
Objective-C
1.UIButton *btn = [[UIButton alloc] init];
2.btn.frame = CGRectMake (20,20,20,20);
3.btn.backgoundColor = [UIColor blueColor];
4.[self.view addSubview:btn];
Swift:
1.var btn = UIButton()
2.btn.frame = CGRectMake (20,20,20,20)
3.btn.backgoundColor = UIColor.blueColor()
4.self.view addSubview(btn)
使用,學習Swift:
從學習Swift的語言角度看:
Swift是一門新語言,語法難度對每一個程序員都差很少;
從使用Swift開發iOS程序的角度看:
使用Object-C的老牌iOS程序員更佔優點;
由於從Object-C轉爲Swift去開發iOS程序,僅僅是書寫的格式變換了,iOS開發的步驟、思想、框架都沒有改變。
1、Swift變量和常量<語法須知>
Swift的源文件擴展名是.swift
2個不須要:
不須要編寫main函數(默認從上往下按順序執行,因此最前面的代碼會被自動看成程序的入口);
不須要在每一條雨具後面加上分號(喜歡的話加上也是能夠的;有一種狀況必須加分號:同一行代碼上有多條語句時);
註釋:
單行註釋:// 單行註釋
多行註釋:/* 多行註釋 */
注:多行註釋能夠嵌套多行註釋 (C和OC中這樣是會報錯的):
/* 外層註釋
/* 內層註釋
多行註釋 */
外層註釋 */
常量和變量
如何聲明常量和變量:
用let來聲明常量:let radius = 10
用var來聲明變量:1.var age = 20 2.var x = 0.0,y = 0.0,z = 0.0
PlayGroud的使用:
Xcode自帶的一個工具,能夠在屏幕右邊框內直接看到左邊代碼的執行結果,點後邊的加號能夠在下邊更加直觀的顯示,UI也能夠。(練習的時候可使用,仍是挺好的)。
字符串:
字符串是String類型的數據,用雙引號「」包住文字內容
let website = "http://ios.itcast.cn」
字符串的常見操做:
用加號+作字符串拼接
1.let scheme = 「http://「
2.let path = 「iOS.itcast.cn」
3.let website = scheme + path //website的內容是: "http://ios.itcast.cn」
用反斜線\和小括號()作字符串插值(把常量\變量插入到字符串中)
1.let hand = 2
2.var age = 20
3.let str = 「我今年\(age)歲了,有\(hand)隻手」 //str的內容是:「我今年20歲了,有2隻手」。
整數轉成字符串:var str = String(age);var str2 = 「\(age)」;這兩種方法均可以。
打印輸出:Swift提供了2個打印輸出函數
println:輸出內容後會自動換行;
print:對比println,少了個自動換行的功能;
常量和變量的命名:
基本上能夠用任何你喜歡的字符來做爲常量和變量名
1.let 網址 = 「http://ios.itcast.cn」
2.let 🐶🐮 = 「小狗和母牛」
🐶和🐮是emoji表情,是一種特殊的Unicode字符;
能夠在Mac上經過快捷鍵:control + command + 空格,彈出emoji鍵盤;
常量和變量名的注意點:
不能包含數學符號(好比 +、-、*、\);
不能包含箭頭(好比←、→、↑、↓)
不能包含非法無效的Unicode字符(好比⚽️)
不能是關鍵字(好比let、var)
不能以數字開頭(好比123go)
不能是單獨一個下劃線_ (好比var _ = 10)
數據類型:
Swift中經常使用的數據類型有:
Int Float Double Bool Character String
Array Dictionary 元組類型(Tuple) 可選類型(Optinal)
能夠看出:數據類型的首字母都是大寫的
如何指定變量\常量的數據類型
在常量\變量名後面加上 冒號(:)和類型名稱
let age: Int = 10
上面代碼表示:定義了一個Int類型的常量age,初始值是10
通常來講,沒有必要明確指定變量\常量的類型
若是在聲明常量\變量時賦了初始值,Swift能夠自動推斷出這個常量\變量的類型
let age = 20
//Swift會推斷出age是Int類型,由於20是個整數
變量的初始化:
Swift嚴格要求變量在使用以前必須進行初始化
下面代碼是錯誤的
1.var a: Int
2.let c = a + 10
解析:1>第1行代碼中:Swift並不會爲變量a賦初值,a沒有初始化
2>第2行代碼會報錯
下面代碼是正確的
1.var a: Int = 20
2.let c = a + 10
整數:
整數分爲2種類型:
有符號(signed):正、負、零
無符號(unsigned):正、零
Swift提供了八、1六、3二、64位的有符號和無符號整數,好比
UInt8:8位無符號整型
Int32:32位有符號整型
Int八、Int1六、Int3二、Int6四、
UInt八、UInt1六、UInt3二、UInt64
最值:
能夠經過min和max屬性來獲取某個類型的最小值和最大值
1.let minValue = UInt8.min 最小值等於0
2.let maxValue = UInt8.max 最大者等於255
Int和UInt
Swift還提供了特殊的有符號整數類型Int和無符號整數類型UInt
Int\UInt的長度和當前系統平臺同樣
>在32位系統平臺上,Int和UInt的長度是32位
>在64位系統平臺上,Int和UInt的長度是64位
Int在32位系統平臺的取值範圍:-214783648~214783647
建議:
在定義變量時,別老是在考慮有無符號、數據長度的問題
儘可能使用Int,這樣能夠保證代碼的簡介、可複用性。
存儲範圍:
每種數據類型都有澤子的存儲範圍,好比:
Int8的存儲範圍是:-128~127
UInt8的存儲範圍是:0~255
若是數值超過了存儲範圍,編譯器會直接報錯
下面的語句都會直接報錯
1.let num1: UInt8 = -1
2.let num2: Int8 = Int8.max + 1
第1行代碼報錯緣由:UInt8不能存儲負數
第2行代碼報錯緣由:Int8能存儲的最大值是Int8.max
整數的表示形式:
十進制數:沒有前綴
let i1 = 10 //10
二進制數:以0b爲前綴
let i2 = 0b1010 //10
八進制數:以0o爲前綴
let i3 = 0o12 //10
十六進制數:以0x爲前綴
let i4 = 0xA //10
浮點數:
浮點數,就是小數。
Swift提供了兩種浮點數類型
Double:64位浮點數,當浮點值很是大或須要很是精確時使用此類型
Float:32位浮點數,當浮點值不須要使用Double的時候使用此類型
精確程度
Double:至少15位小數
Float:至少6位小數
若是沒有明確說明類型,浮點數默認就是Double類型
let num = 0.14 //num是Double類型的常量
浮點數的表示形式
浮點數可使用十進制和十六進制2中進制來表示
十進制(沒有前綴)
沒有指數:let d1 = 12.5
有指數:let d2 = 0.125e2
//0.125e2 == 0.125 * 10² MeN ==M * 10的N次方
十六進制(以0x爲前綴,且必定要有指數)
let d3 = 0xC.8p0
//0xC.8p0 == 0xC.8 * 2º == 12.5 * 1 0xMpN == 0xM * 2的N次方
let d3 = 0xC.8p1
//0xC.8p1 == 0xC.8 * 2^1== 12.5 * 2 == 25.0
數字格式:
數字能夠增長額外的格式,使它們更容易閱讀
能夠增長額外的零 0
1.let money = 0019999 //1999
2.let money2 = 001999.000 //1999.0
能夠增長額外的下劃線_,以增長可讀性
1.let oneMillion1 = 1_000_000 //1000000
2.let oneMillion2 = 100_0000 //1000000
3.let overOneMillion = 1_000_000.000_001 //1000000.000001
增長了額外的零 0和下劃線_,並不會影響原來的數值大小。
類型轉換
兩個類型不相同的數值,是不能直接進行運算的
下面的語句是錯誤的
1.let num1:UInt8 = 10
2.let num2:Int = 20
3.let sum :Int = num1 + num2(×) 改正:let sum :Int = Int(num1) + num2(√)
第3行會報錯
報錯緣由:num1是UInt8類型,num2是類型Int,類型不一樣,不能相加
解決方案:將num1轉爲Int類型,就能與num2進行相加
下面的語句是錯誤的
1.let num1 = 3
2.let num2 = 0.14
3.let sum = num1 + num2(×) 改正:let sum = Double(num1) + num2(√)
第3行會報錯
報錯緣由:num1是Int類型,num2是類型Double,類型不一樣,不能相加
解決方案:將num1轉爲Double類型,就能與num2進行相加
注意:下面的寫法是正確的
let sum = 3 + 0.14
➹ 3和0.14相加獲得結果3.14,等賦值之後,編譯器纔會自動推斷出sum是Double類型
類型別名
可使用typealias關鍵字定義類型的別名,跟C語言的typedef做用相似
typealias MyInt = Int //給Int類型起了個別名叫作MyInt
原類型名稱能用在什麼地方,別名就能用在什麼地方
聲明變量\常量類型
let num:MyInt = 20
得到類型的最值
let minValue = MyInt.min
類型轉換
let num = MyInt(3.14) //3