?Swift 簡介
. Swift 是蘋果公司余2014年推出的新語言礼殊,用于iOS 和 OS X 的應(yīng)用編程
Swift 歷史
.從發(fā)布至今共經(jīng)歷的過 1.0、2.0试躏、3.0斩披、3.2端姚、4.0晕粪、4.2、5.0渐裸、5.1等版本巫湘,中間語法和API逐步完善并穩(wěn)定下來。
常量&變量
在Swift中規(guī)定:在定義一個標(biāo)識符時必須明確說明該標(biāo)識符是一個常量還是變量
使用let來定義常量,定義之后不可以修改
使用var來定義變量,定義之后可以修改
例:
let a :Int =10// 錯誤寫法,當(dāng)一個字段定義為常量時是不可以修改的//?
a = 20
var b :Int=20// 因為b定義為變量,因此是可以修改的
b =30
Swift中數(shù)據(jù)類型
1.與OC不同的是Swift中不在提供隱式轉(zhuǎn)換昏鹃,相同的數(shù)據(jù)類型才可以計算
2.不同類型的話尚氛,可以強(qiáng)制轉(zhuǎn)換與OC不用,Swift中例如:
????Int類型轉(zhuǎn)成Double類型:Double(標(biāo)識符)
????Double類型轉(zhuǎn)成Int類型:Int(標(biāo)識符)
邏輯分支
1.if語句洞渤,在Swift中判斷條件可以不在加()阅嘶,也沒有OC中非0即真的語法了,另外必須有明確的Bool值载迄,不再是YES/NO讯柔,而是true/false。
2.switch語句护昧,判讀條件可以是String類型魂迄,case后可以不跟break(默認(rèn)會有break),基本用法和OC是一樣的捏卓。
3.三目運算符和OC中基本保持一致
例:ar a =10?
? ? ? ?var b =50
? ? ? ?var? result = a > b ? a : b
? ? ? print(result)? 這里說一下 早些版本打印用的是println
4.guard這是是Swift中特有的OC中沒有這個語法极祸,這個特點是增加程序的可閱讀性慈格,與if的語法很像怠晴。? ? ? ? ? ?
guard語句必須帶有else語句,它的語法如下:
當(dāng)條件表達(dá)式為true時候跳過else語句中的內(nèi)容浴捆,執(zhí)行語句組內(nèi)容
條件表達(dá)式為false時候執(zhí)行else語句中的內(nèi)容蒜田,跳轉(zhuǎn)語句一般是return、break选泻、continue和throw
例:guard 條件表達(dá)式else{
????????/ / 條換語句
? ? ? ?????break
????????}
????語句組
循環(huán)的介紹
1.for循環(huán)
fori in0..<10{//這個是開區(qū)間冲粤,不包含10
? ? ? ? print(i)
? }
fori in0...10{//這個是閉區(qū)間美莫,包含10
????????print(i)
}
字符串
1.Swift中字符串的類型是String,本質(zhì)是個結(jié)構(gòu)體梯捕,性能更高厢呵,NSString是一個OC對象,性能相對略差傀顾。String可以直接遍歷襟铭,另外提供了NSString與String之間的無縫轉(zhuǎn)換。
2.下面進(jìn)行舉例子(3.2版后字符串操作不同短曾,與OC區(qū)別有點大)
var str ="Hello, playground"
str.prefix(3)// Hel? 取前3個字符
str.suffix(3)// und??取后3個字符
遍歷字符串
var swift ="Swift 很有趣"
for(index , value) in swift.enumerated(){
????????print("index is \(index), value is \(value)")
}
替換字符串
if let index = swift.index(of:"很"){?
?swift.replaceSubrange(index ..< swift.endIndex,with:"is interesting!")
}?
將數(shù)組中的元素拼接成字符串
? ?let arrayStr : String! = array11.joined(separator: ",")
? ? print("arrayStr = \(arrayStr!)"
數(shù)組
1.主要四部寒砖,增刪改查(搞的和數(shù)據(jù)庫一樣的操作),廢話不多說 嫉拐,直接搞起來:
// 定義一個可變數(shù)組,必須初始化才能使用var array1 : [String] = [String]()
// 定義一個不可變數(shù)組let? array2 : [NSObject] = ["why",18]
// 定義時直接初始化var array = ["why","nqs","gyx"]
// 添加數(shù)據(jù)array.append("yz")
// 刪除元素array.removeFirst()
// 修改元素array[0] ="why"http:// 取值array[1]
2.數(shù)組遍歷
// 遍歷數(shù)組
// for in方式
for item in array {
????print(item)
}
// 設(shè)置遍歷的區(qū)間
for item in array[0..<2] {
????print(item)
}
字典
1.Swift中字典也是一個泛型的集合哩都。從初始化和基本操作開始:
// 定義一個可變字典
var dict1 : [String:NSObject] = [String:NSObject]()
// 定義一個不可變字典let dict2 = ["name":"nqs","age":18]
// 添加數(shù)據(jù)
dict["height"] =1.88
dict["weight"] =70.0
// 刪除字段? dict.removeValueForKey("height")
// 修改字典? ?dict["name"] ="ergou"
// 查詢字典? ?dict["name"]
// 遍歷字典中所有的值for value in dict.values {print(value)}
// 遍歷字典中所有的鍵for key in dict.keys {print(key)}
// 遍歷所有的鍵值對for(key, value) in dict {print(key)print(value)}
最后說一句,字典不能相加合并
元祖
1.元祖是swift中特有的類型婉徘,它是一種數(shù)據(jù)結(jié)構(gòu)在數(shù)學(xué)中應(yīng)用廣泛漠嵌,類似于數(shù)組或者字典,廢話不多說直接舉例子:
// 寫法一:
let error = (404,"Not Found")
print(error.0)
// 寫法二: (也就相當(dāng)于自己取了個別名)
let error = (errorCode :404, errorInfo :"Not Found")
print(error.errorCode)
可選類型
說重點 這個是比較難理解的盖呼,在這只說基本的概念献雅,寫過OC的同學(xué)都是知道,當(dāng)我們寫一個屬性的時候是可以為nil的塌计,最基本的寫法(語法糖)
// 寫法一:定義可選類型let name :Optional =nil
// 寫法二:定義可選類型,語法糖(常用)let name :String? =nil
應(yīng)用場景:
// 通過該方法創(chuàng)建的URL,可能有值,也可能沒有值.
// 錯誤寫法:如果返回值是nil時,就不能接收了
// 如果字符串中有中文,則返回值為nil,因此該方法的返回值就是一個可選類型,而使用一個NSURL類型接收是錯誤的
let url :NSURL=NSURL(string:"www.baidu.com")
// 正確寫法:使用可選類型來接收let url :NSURL? =NSURL(string:"www.baidu.com")
// 該方式利用類型推導(dǎo)let url =NSURL(string:"www.520it.com")
// 通過url來創(chuàng)建request對象:在使用可選類型前要先進(jìn)行判斷是否有值
// 該語法成為可選綁定(如果url有值就解包賦值給tempURL,并且執(zhí)行{})
if let tempUrl = url {let request =NSURLRequest(URL: tempUrl)}
函數(shù)
Swift中的函數(shù)的概念就相當(dāng)于OC中的方法具體格式如下:
func函數(shù)名(參數(shù)列表)-> 返回值類型{?
?代碼塊return返回值
}
func是關(guān)鍵字,多個參數(shù)列表之間可以用逗號(,)分隔挺身,也可以沒有參數(shù)
使用箭頭“->”指向返回值類型
如果函數(shù)沒有返回值,返回值為Void.并且“-> 返回值類型”部分可以省略
分為以下幾種:
@1無參數(shù)無返回值的
func about()->Void{
print("iphone6s plus")
}
@2有參數(shù)沒有返回值
func callPhone(phoneNum : String){
print("打電話給\(phoneNum)")
}
@3沒有參數(shù)有返回值
func readMessage()->String{
return"吃飯了嗎?"
}?
@4有參數(shù)有返回值
func sum(num1 : Int, num2 : Int)->Int{
return num1 + num2
}