1.常量和變量swift
定義一個常量:let 常量初始化賦值後 不能再次賦值數組
定義一個變量:var 賦值後 能夠在此修改 後面必定要修改 不然選擇let網絡
2.Swift有數據類型推導 根據後面的值直接推出來的類型(option加鼠標左鍵4)閉包
3.顯示指定類型 let c:Double = 20.5app
4.在swift中沒有隱式類型轉換函數
類型不一樣 不能參與運算編碼
5.let&var 選擇url
建議先使用let 在哪須要修改時 再改爲varspa
6.optional可選類型定義的常量或者變量可能有值 可能沒有值(空,nil)指針
(1)定義的常量或者變量不能 直接參與計算
格式:可選類型- 類型後面加上 「 ?」
eg:var a:Int ?
定義的可選類型的變量默認值是nil
(2)‘ Optional ’代表 定義的變量或者常量是一個可選類型
‘ unwrapped ’ 代表可選類型沒有進行解包
(3)let result = a !+ b
‘ !’ 對可選類型的變量或者常量進行強制解包(告訴系統這個值必定存在 你去用吧 ) 若是這個值不存在(unexpectedly found nil while unwrapping an Optional value 對一個可選值爲nil 強制解包 崩潰)
在swift裏面操做符空格要匹配
(4)??運算符
let result = (a ?? 0)+ b
使用 空合併運算符 ‘ ?? ‘ 判斷前面的可選類型的變量或者常量是否有值 若是有值 直接使用 a參與計算 若是a爲nil 使用??後面的值參與計算
7.if控制流
(1)if num > 5{
}
‘ ()’ 能夠省略
在swift 裏面 只有一行代碼 也不能省略‘ {}’ 在swift裏面 沒有‘ 非0即真‘的概念 條件語句的值 只能有true / false 須要一個bool類型的值
(2) 可選類型的判斷
-unexpectedly found nil while unwrapping an Optional value
-對一個可選類型的值爲nil 強制解包 報錯
(3)if let 判斷
它的意思是 判斷可選類型的變量或者常量(URL)是否有值 有值 就使用前面定義的常量或者變量去記錄這個值 若是這個可選類型的變量或者常量爲nil 就不執行 if let語句
if let u = url{
//再次就能夠使用u 並且這個u是必定存在的
let request = NSURLRequest(URL:u)
}
(4)多個可選類型的判斷
let name:String ?=「張三」
let age : Int ? = 20
//也能夠使用var進行判斷
if let n = name,(var)a = age
{
print()
}
(5)guard let判斷 與if let相反的語法
//在循環裏面能夠使用break continue,不在循環裏面使用return
//guard let 判斷可選類型的常量或者變量是否有值 若是有值 則賦值給定義的常量或者變量 不然沒有值 執行else語句裏面的
guard let u = url else{
}
(6)可選類型條件的判斷
if let …. where….
where子句沒有智能提示,子句能夠使用&&
8.switch判斷
swift 能夠判斷任意類型 能夠省略break 能夠省略大括號 case後必須有可執行語句
OC 只能判斷整型
9.for循環
for ,while, do while,for in
0..<3 意思是 區間-[0,3)
0…3 意思是閉區間 -[0,3]
10.字符串的定義
(1)定義:swift :string這個類型 是一個結構體它的量級輕 速度是比NSString要快 它能夠跟NSString無縫轉換 支持字符串的遍歷
OC NSString 它是一個對象 不支持字符串的遍歷
(2)字符串的拼接
使用「 + 」能夠拼接字符串
(3)‘ \()’ 能夠拼接字符串
能夠不用強制類型轉換
(4)字符串長度
//統計字符串字符的個數
characters.count
//統計字節數
一個漢字在UTF8編碼格式下佔用3個字節
(5)字符串的格式化
(6)字符串的截取
11.集合
(1)數組
定義數組:let 不可變數組 ;var 對應的可變數組
let array = [1,2,3,4]
let array1 = [「張三」,「李四」]
var array2:[string] = [string]()
//添加元素
array2.append(「蘋果」)
//數組的遍歷
for
for value in array
for (index,value) in array.enumerate
//數組的合併 +
兩數組直接相加
類型不匹配 不能直接合並
//數組刪除 remove
//數組的容量 capacity
容量是成倍擴展的 是2的倍數
(2)字典
字典的定義 [string :NSObject]這種字典類型是最經常使用 字典是無序的 數組是有序的
let定義的字典是不可變的 var 是可變的
//合併字典
不一樣類型的字典不能合併
//字典的刪除remove 或者 dict[「age」]= nil
//添加 若是key不存在就是添加操做
//修改 若是key存在就是修改操做
12.函數
(1)//無參數 無返回值
func demo1()
//在swift2.0裏面函數的第一個參數默認省略
//有兩個參數 無返回值
func demo2(a:Int,b:Int)
//有兩個參數 無返回值的函數 num1 num2是外部參數 (是給調用方解釋參數是什麼意思 參數是幹嗎的)
func demo3(num1 a :Int,num2 b:Int){}
//有參數有返回值的函數
func sum(a:Int,b:Int)->Int { return a + b }
(2))函數格式
func 函數名(參數名:參數類型…)->返回值類型{}
(3)沒有返回值的三種類型
<1>func demo(num1 a:Int,num2 b:Int){}
<2>func demo(num1 a:Int,num2 b:Int)->Void{}
<3>func demo(num1 a:Int,num2 b:Int)->( ){}
(4)swift中能夠使用函數的嵌套
13.閉包
(1)和OC中的block是很是相似的 是一個預先定義好的代碼塊 能夠做爲函數的參數傳遞 也能夠做爲函數的返回值 在須要的時候調用‘ ( ) ’ 在使用self的時候須要注意循環引用
(2)閉包定義格式
閉包名 = { (參數名 :參數類型,…)->返回值類型 in 執行代碼 }
(3)沒有返回值的閉包能夠直接去掉‘ ->( ) ’
(4)定義一個沒有參數 沒有返回值的閉包能夠直接去掉()->() ()->Void
(5)???尾隨閉包
//若是閉包做爲函數的最後一個參數的話 則小括號‘()’ 在閉包前面(小括號‘ ()’提早關閉 )
//若是閉包沒有參數和返回值 能夠省略‘ ()->Void in’
14.OC block循環引用
//加載網絡數據的方法
//模擬耗時操做 獲取網絡數據
15.解決block循環引用
//使用__weak 解決block的循環引用
//對象銷燬後 weakSelf指向的地址爲nil
__weak typeof(self)weakSelf = self;
//使用__unsafe_unretained解決block的循環引用
//對象銷燬後 weakSelf指向地址不變 地址對應對象已經銷燬了 崩潰了報野指針
__unsafe_unretained typeof(self)weakSelf = self