?1 . swift簡介
1.1 ? 在swift當(dāng)中沒有main函數(shù)的概念。swift沒有 .h 和 .m 文件鞭铆,一個(gè)類只用.swift來表示或衡。
? ? ? ? 在swift當(dāng)中可以不寫分號(hào)。但如果一行當(dāng)中有多條語句的時(shí)候车遂,分號(hào)就必須寫封断。
? ? ? ? 在swift當(dāng)中采用 print函數(shù)來代替NSLog函數(shù)打印數(shù)據(jù),而且蘋果建議我們這樣舶担,print函數(shù)效率比 ? NSLog要高.在print函數(shù)里面沒有占位符的概念坡疼,如果要插入?yún)?shù)采用 \ ( )。
?1.2 ?在swift當(dāng)中變量和常量分別用var/let表示衣陶。
? ? ? ? 格式:let/var 名字 = 初始值柄瑰。
? ? ? ? ?在swift當(dāng)中不用明確的指出變量和常量的類型,XCode會(huì)根據(jù)你的初值自行推導(dǎo)出具體類型 ? ? ? ? ? ?(Optional + Click )
2 swift中常用的數(shù)據(jù)類型
?2.1 ?swift不存在隱式轉(zhuǎn)換剪况,不同數(shù)據(jù)類型不能做運(yùn)算教沾,做運(yùn)算之前必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換
? ? ? ? ?格式:let/var名字:數(shù)據(jù)類型 = 初始值
? ? ? ? ?//swift整型和雙精度浮點(diǎn)型相加,就需要強(qiáng)轉(zhuǎn)一下
? ? ? ? ?let a1:Int = 2
? ? ? ? ?var a2:Double = 2.32
? ? ? ? ?let b = a1 + Int(a2)
? ? ? ? ?print("b")
? ? ? ? //bool布爾值只能用? true? or? ? false
? ? ? ? ?let a3:Bool = true ? ??
? ? ? ? ?print("a3 = \(a3)"))
? ? ? ? //字符類型采用character 并且雙引號(hào)賦值
? ? ? ? let a4:Character = "a"
? ? ? ?//在swift中采用String 表示一個(gè)字符串译断,雙引號(hào)賦值授翻,不是一個(gè)對(duì)象,是一個(gè)結(jié)構(gòu)體
? ? ? ? var a5:String = "海賊-女帝"
? ? ? ?// swift ? ??->空運(yùn)算標(biāo)示符
? ? ? ? ? ?? -->如果可選類型值不為空的話,會(huì)幫我們進(jìn)行強(qiáng)制解包之后參與運(yùn)算堪唐,如果為nil的話則提供一個(gè)默認(rèn)值給我們
? ? ? ? var value:Int?
? ? ? ?let value1 = (value ?? 5) + 20
? ? ? ?print("value1 = \(value1)")
2.2 ? 字符串
? ? ? ? var str = "hello"
? ? ? ? 1.長度
? ? ? ? print("長度 = \(str.characters.count)") ? ??
? ? ? ? 2.拼接字符串采用+=? 拼接字符append函數(shù)
? ? ? ? var str1 = "world"?
? ? ? ? ?str += str1
? ? ? ? ?print("str = \(str)")
? ? ? ? ?let c:Character = "c"
? ? ? ? str.append(c)
? ? ? ? print("str = \(str)")
? ? ? //是否相等 == ? ?
? ? ? ?if(str1 == "world"){
? ? ? ?print("相等")
? ? ? ?}
? ? ? ?//前綴相等
? ? ? ?if(str1.hasPrefix("wo")){
? ? ? ?print("前綴是wo")
? ? ? ?}
? ? ? //后綴
? ? ? if(str1.hasSuffix("ld")) {
? ? ? ? print("后綴是ld")
? ? ? ?}
? ? ? //大小寫轉(zhuǎn)換
? ? ? ?print("str1的大寫\(str1.uppercaseString)")
? ? ? ?let str2 = "2331THJF"?
? ? ? ?print("str1的大寫\(str2.lowercaseString)")
? ? ? //字符串String 支持遍歷
? ? ? for item in str.characters{
? ? ? ?print(item)
? ? ? }
? ? ? //swift里面的字符串跟OC字符串可以互相轉(zhuǎn)換
? ? ? ?let str4 = str1 as NSString?
2.3 數(shù)組
? ? ? ?在swift中數(shù)組類型是Array,創(chuàng)建一個(gè)數(shù)組或者字典必須明確的指出數(shù)組里面元素類型
? ? ? ?跟OC里面NSArray可以互相轉(zhuǎn)換
? ? ? ?var array1:[String] = ["123","456","356"]
? ? ? ?//增加元素
? ? ? ?array1.append("888")
? ? ? ?print(array1)
? ? ? ?//刪除
? ? ? ?array1.removeAll(keepCapacity: true)?
? ? ? //遍歷分兩種:普通遍歷和云組遍歷
? ? ? //普通遍歷
? ? ? ?for item in array1{
? ? ? ?print(item)
? ? ? ?}
? ? ? //云組遍歷? //enumerate(array)Xcode 2.2之前的寫法
? ? ? ?for(index, value)in array1.enumerate() {
? ? ? print("index = \(index),value = \(value))")
? ? ? }
? ? ? //數(shù)組個(gè)數(shù) :array1.count
2.4 字典
? ? ? ?var dict0:[String:AnyObject] = ["1":"a", "2":"v", "3":"c"]
? ? ? ?var dict1:[String:AnyObject] = ["4":"a", "5":"v", "6":"c"]
? ? ? //增加和更新元素
? ? ? ?dict0["4"] = "r"? //如何key 存在就是一個(gè)更新操作隆箩,如果不存在就是一個(gè)增加操作
? ? ? ?print(dict0)
? ? ? //移除元素
? ? ? dict0.removeAtIndex(dict0.indexForKey("4")!)
? ? ? dict0.removeValueForKey("1")
? ? ? print(dict0)
? ? ? //遍歷
? ? ? for item in dict0{
? ? ? print(item)
? ? ? ?}
? ? ? for(index,value)in dict0.enumerate(){
? ? ? print("index = \(index),value = \(value)")
? ? ? }
? ? ? //合并兩個(gè)字典
? ? ? for item in dict0.keys{
? ? ? dict1[item] = dict0[item]
? ? ? }
2.5 可選類型
? ? ? ?概念:如果一個(gè)值可能有值,也可能為空羔杨,那么這個(gè)常量/變量就是一個(gè)可選類型.可選類型用?標(biāo)示出來
? ? ? ?如果打印數(shù)據(jù)被Optional字樣包含的話說明打印了一個(gè)可選類型
? ? ? ?可選類型不能直接參與運(yùn)算杨蛋,參與運(yùn)算之前必須強(qiáng)制解包兜材!標(biāo)示
? ? ? ?警告:在對(duì)一個(gè)可選類型進(jìn)行強(qiáng)制解包之前必須確認(rèn)這個(gè)可選類型不能為nil
? ? ? ?錯(cuò)誤類型error ?:unexpectedly found nil while unwrapping an Optional value ? 說明對(duì)nil 強(qiáng)制解包
? ? ? ?在模型里面所有的基本數(shù)據(jù)類型不可以為可選類型,否則的話在字典轉(zhuǎn)模型的話找不到這個(gè)key逞力。給默認(rèn)值0
2.6 枚舉
? ?swift 一個(gè)枚舉成員不局限于關(guān)聯(lián)整形數(shù)據(jù)曙寡,也沒有默認(rèn)值
? ?如果枚舉關(guān)聯(lián)的是一個(gè)整形數(shù)據(jù)的話,后面的枚舉值會(huì)根據(jù)前面進(jìn)行累加
? ?如果枚舉關(guān)聯(lián)的是一個(gè)非整形數(shù)據(jù)寇荧,必須給出所有的枚舉關(guān)聯(lián)值?
? ?如果一個(gè)枚舉類型已經(jīng)指定的話举庶,下次賦值的時(shí)候可以通過(.)進(jìn)行賦值,省略前面的
? ?獲取枚舉成員關(guān)聯(lián)的默認(rèn)值 .rawValue
? ? ?enum Month:String {
? ? ? //兩種賦值方式
? ? ? //case January,February,Match
? ? ? case January = "一月"
? ? ?case February = "二月"
? ? ?case Match = "三月"
? ? ?}
? ? ?var month = Month.January
? ? ? print("month1 = \(month.rawValue)")
? ? ? month = .Match
? ? ? print("month1 = \(month.hashValue)")
2.7 控制流
? ? 1.if后面的小括號(hào)可以省略揩抡,大括號(hào)不能省略
? ? 2.swift中if后面的條件語句沒有“非0即真”的概念
? ? let a = 10
? ? if(a > 0){
? ? print("a > 0")?
? ? }
? ? 2.可選類型的判斷 if - let
? ? ? ?if - let:先判斷可選類型是否為空户侥,不為空創(chuàng)建一個(gè)局部變量接收此時(shí)可選類型的值,再執(zhí)行代碼塊峦嗤,否則不執(zhí)行代碼塊
? ? ? ?let a:Int? = 10
? ? ? if let b = a{
? ? ? print("b = \(b)")
? ? ? }
? ? ? if-let-where ? ? ?where是對(duì)定義出來的常量再做一層判斷
? ? ? if let c = a where c > 5{
? ? ? print("a > 5")
? ? ? }
? ? ? ?guard 守護(hù) ? ? 是判斷可選類型是否有值蕊唐,沒值的話執(zhí)行else里面的代碼塊,有值的話不執(zhí)行代碼塊,在下面執(zhí)行
? ? ? //定義一個(gè)函數(shù)
? ? ? func demo(){
? ? ? var a:Int? = 12
? ? ?guard let d = a else ?{
? ? ? print("a = nil")?
? ? ? return?
? ? ? ?}?
? ? ? ?print("d = \(d)")
? ? ? }
? ? ? ?//調(diào)用函數(shù)
? ? ? demo()
2.8 switch
? ? ?//switch
? ? //switch 后面的小括號(hào)可以省略
? ? //case 后面的break 可以不寫烁设,不會(huì)造成穿透的效果
? ? //默認(rèn)default必須添加替梨,而且只能加在最后面
? ? //case后面至少有一條執(zhí)行語句,case后面的大括號(hào)可以省略不寫
? ? //switch不再像OC那樣只局限于整形的選擇
? ? let a = 10
? ? switch a
? ? {
? ? case 2:
? ? print("a = 2")
? ? case 3 :
? ? print("a = 3")
? ? case 10:
? ? print("a = 10")
? ? print("a = 10")
? ? default :
? ? print("a = nil")
? ? }
? ? //switch不再像OC一樣只局限于整形装黑、浮點(diǎn)型副瀑、字符串等
? ? let score = "優(yōu)"
? ? switch score
? ? { ?
? ? case "優(yōu)":
? ? print("a = 2")
? ? case "良":
? ? print("a = 3")?
? ? case "差":?
? ? print("a = 10")
? ? default :
? ? print("a = o")
? ? ?}
2.9 ?循環(huán)
? ? ? ? //寫法一
? ? ? ? //for()在swift2.2后面就廢棄了
? ? ? ?for var i = 0;i < 10;i++
? ? ? ?{
? ? ? ? print(i)
? ? ? ? }
? ? ? ?//寫法二(閉區(qū)間)
? ? ? for i in 0...10 {
? ? ? ?print(i) ?
? ? ? }
? ? ? ?//[0,10)開區(qū)間
? ? ? ?for i in 0..<10
? ? ? ?{
? ? ? ? print(i)
? ? ? ?}
? ?//while?
? ? ? var i = 10
? ? ? while i > 1
? ? ? {
? ? ? print(i)
? ? ? i--
? ? ? }
? ? ?//do-while不存在,取代的是repeat-while
? ? ?var i = 10
? ? repeat{
? ? print(i)
? ? i--
? ? }while i > 5