Swift 學(xué)習(xí)歷程(結(jié)合其使用方法和使用場景)

Swift-Onlyoner

Swift是編程語言的最新研究成果,并結(jié)合數(shù)十年的經(jīng)驗建設(shè)蘋果平臺的結(jié)果矛绘。結(jié)轉(zhuǎn)自O(shè)bjective-C的命名參數(shù)表示在一個干凈的語法甸鸟,使得Swift的API更容易閱讀和維護(hù)

眾所周知swift曾經(jīng)一度同Kotlin被谷歌列為安卓開發(fā)語言的首選語言之一,由于某些原因最終選擇Kotlin了哮塞,蘋果在2014年WWDC首次推出并稱在20年內(nèi)讓全球的每一臺智能設(shè)備都用swift語言來開發(fā)纷闺。

Swift特有許多其他的功能算凿,使你的代碼更傳神:
閉包的統(tǒng)一與函數(shù)指針
元組和多個返回值
泛型
快速而簡潔的迭代范圍或集合
支持的方法,擴展的協(xié)議結(jié)構(gòu)犁功。
函數(shù)式編程模式氓轰,例如:映射(map)和過濾器(filter)

目前更新至swift 3.0 部分之前的 C 方法在3.0里已經(jīng)不再支持 可升級最新版Xcode為8.3.2版本

代表示例:

swift 3.0沒有C類型的for循環(huán)了,用for in吧

開始

1.var 定義變量

var str = "heal"

2.let 定義常量

 let num = 10
 let MI_P = 3.1415926
 
 print(MI_P)
 var current = 20
 
 print(num,current,str)

3.int

 var  runtoday = 5
 runtoday = 6
 print(runtoday)

4.double

 var doubleshu:Double = 0.5
 //doubleshu = 3 把這個值改成原始類型的值 為的是安全起見 防止意外的錯誤
 //類型安全
 print(doubleshu)

5.Bool

 var isok = true
 
 isok = false
 
 print(isok)

6.可選類型(Optional) Optional定義的量可有值 可無值

 如用戶選填部分
 形式:var 變量:類型浸卦?署鸡,默認(rèn)是無值nil
 var addr : String?
 
 addr = "woshidouxindong"
 
 print(addr ?? 0)
 
 var num : intmax_t?
 
 num = 1
 
 print(num ?? 0)

7.判斷是不是空

var a = ""
 
 print(a.isEmpty)//是空 true
 
 var b = "  "
 
 print(b.isEmpty)//不是空 因為有空格 代表著某種字符

8.字符Character是單個字符的意思

 var a: Character = "我"
 var b: Character = "你"
 
 print(a)
 print(b)

9.把words這個句子單個拆開

 let words = "hellowere"
 
 //words.characters 是把words這個句子單個拆開
 for word in words.characters {
 //逐個輸出
 print(word)
 }

10.字符串拼接

 let a = "你"
 let b = "好"
 let c = "嗎"
 
 var famous = a + b + c
 
 
 print(famous)//輸出:你好嗎
 
 let str1: Character = "安"
 let str2: Character = "迪"
 
 famous.append(str1)
famous.append(str2)
 
 print(famous)//輸出:你好嗎安迪

11 字符串插值:把【常量/變量/字面量/表達(dá)式】組合成一個長字符串

let name = "xiaoming"
 
 let type = "G"
 
 let number = 11
 
 let price = 100.8
 
 let message = "\(name)定了\(type)類型的\(number)票,支付\(price * 3)元"
 
 print(message)
 
 //輸出xiaoming定了G類型的11票,支付302.4元

11.1特殊字符

 \0 \ \t \n \r " ' \u{n}
 let strings = "xiao\0ming\t定了\nG類型\r的11票,支付302.4\\u{n}元"
 
 print(strings)

12 數(shù)組

//1??創(chuàng)建一個有默認(rèn)值的數(shù)組
 let array : [Int]
 
 array = [Int](repeatElement(3, count: 10))//10個元素3
 
 print(array)
 //輸出的:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
 
 //2??創(chuàng)建一個有序范圍的Int數(shù)組,Array(起始值...終止值)
 
 let array2 = Array(0...100)
 
 print(array2)
 //輸出
 /*
 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
 */
 //3??用數(shù)組字面量來創(chuàng)建數(shù)組:[值1,值1,值1,...,值N]
 
 var places = ["beijing","shanghai","guangzhou","shenzhen"]
 
 print(places)
 //輸出
 /*
 ["beijing", "shanghai", "guangzhou", "shenzhen"]
 */
 //4??.1元素計數(shù):count限嫌,空否:isEmpty
 let count_arr = places.count
 let empty = places.isEmpty
 print(count_arr,empty)
 //輸出4 false
 //4??.2 合并
 //數(shù)組追加元素
 places.append("dezhou")//追加一個元素
 print(places)//輸出["beijing", "shanghai", "guangzhou", "shenzhen", "dezhou"]
 
 //數(shù)組追加數(shù)據(jù)合并為一個數(shù)組
 let haiwaiPlaces = ["NewYork","london","Sao paolu"]
 places += haiwaiPlaces
 print(places)
 //輸出
 /*
 ["beijing", "shanghai", "guangzhou", "shenzhen", "dezhou", "NewYork", "london", "Sao paolu"]
 */
 //4??.3 獲取元素:數(shù)組名[索引]靴庆,??索引總是從0開始的 別越界
 let yuansu = places[3]
 print("索引為3的值\(yuansu)")//輸出:索引為3的值shenzhen
 //4??.4 插入:insert
 places.insert("nanjing", at: 3)
 print(places)
 //輸出
 /*
 把南京插入到索引為3的位置
 ["beijing", "shanghai", "guangzhou", "nanjing", "shenzhen", "dezhou", "NewYork", "london", "Sao paolu"]
 */
 //4??.5移除
 places.remove(at: 3)
 print(places)
 /*
 輸出結(jié)果 少了索引為3的 nanjing 輸出成功
 ["beijing", "shanghai", "guangzhou", "shenzhen", "dezhou", "NewYork", "london", "Sao paolu"]
 */

13 集合<Set> 值無序不重復(fù),適合存唯一性的數(shù)據(jù) 怒医,如用戶名/身份證號/護(hù)照號等

//1??
 let cardno : Set = [1,2,3,4,5,1,2,3,4]
 
 print(cardno)
 //輸出[2, 4, 5, 3, 1]
 
 //2??用數(shù)組字面量創(chuàng)建集合
 var citys : Set = ["shanghai","beijing","dezhou","shanghai","beijing","dezhou"]
 //2??.1元素計數(shù):count 炉抒,空否 :isEmpty
 print("元素\(citys.count)個,是否為空:\(citys.isEmpty)")
 //輸出: 元素3個稚叹,是否為空:false   去除重復(fù)元素只計數(shù) 非重復(fù)的元素的個數(shù)
 //2??.2插入: insert
 citys.insert("nanjing")
 print(citys)
 //輸出["shanghai", "dezhou", "nanjing", "beijing"]
 //2??.3移除
 citys.remove("shanghai")
 print(citys)//["dezhou", "nanjing", "beijing"]
 
 //2??.4是否包含元素:contains
 print(citys.contains("dezhou"))//輸出 true
 //2??.5 轉(zhuǎn)換為數(shù)組:sorted
 let citysArray = citys.sorted()
 print(citysArray)//["beijing", "dezhou", "nanjing"]
 
 //3??.1 交集 找出兩個集合相同的元素
 let srray = ["nanjing"]
 let arys = citys.intersection(srray)
 print(arys)//輸出["nanjing"]
 //3??.2 差集
 let sub = citys.subtracting(arys)
 print(sub)//輸出["dezhou", "beijing"]
 //3??.3并集
 let sum = citys.union(sub)
 print(sum)//輸出["dezhou", "nanjing", "beijing"]

14 字典 鍵值對

//1??
 var dic = ["name":"jack","age":"12","birsday":"1993-09-04"]
 print(dic)
 //2?? 判斷個數(shù) 是否為空
 print("元素\(dic.count)個數(shù),是否為空\(dic.isEmpty)")//元素3個數(shù),是否為空false
 //3??添加或更新元素
 dic["shengao"] = "176"
 print("添加身高元素之后的dic ==\(dic)")
 //輸出
 /*
 添加身高元素之后的dic ==["name": "jack", "age": "12", "birsday": "1993-09-04", "shengao": "176"]
 */
 dic["shengao"] = "178"
 print("更新身高元素之后的dic ==\(dic)")
 //輸出
 /*
 更新身高元素之后的dic ==["name": "jack", "age": "12", "birsday": "1993-09-04", "shengao": "178"]
 */
 //獲取某項的情況
 let shengao : String = dic["shengao"]!
 print("身高是\(shengao)")//身高是178
 //4??移除焰薄,用下表把值設(shè)為nil
 dic["shengao"] = nil
 print(dic)
 /*
 輸出 去除了身高的那一項
 ["name": "jack", "age": "12", "birsday": "1993-09-04"]
 */
 //5??循環(huán)一個字典 for in ,因為鍵值對有2個元素,用元組變量
 for (key ,value) in dic {
 print(key,value)
 }
 //輸出
 /*
 name jack
 age 12
 birsday 1993-09-04
 */
 //6??單獨使用 鍵值對里面的keys 或者 values(可使用for in)
 for keys in dic.keys{
 print(keys)
 }
 //輸出
 /*
 name
 age
 birsday
 */
 for values in dic.values{
 print(values)
 }
 //輸出
 /*
 jack
 12
 1993-09-04
 */
 //7??把鍵值對分離成數(shù)組扒袖,用[數(shù)組類型](字典變量.keys),[數(shù)組類型](字典變量.values)
 
 let mingcheng = [String](dic.keys)
 
 let qingkuang = [String](dic.values)
 
 print(mingcheng,qingkuang)
 
 /*
 輸出
 ["name", "age", "birsday"]
 ["jack", "12", "1993-09-04"]
 */
 

15 .控制流 for - in

//15.1
 let places = ["beijing","guangzhou","shenzhen"]
 for place in places {
 print(place)
 }
 /*輸出
 beijing
 guangzhou
 shenzhen
 */
 var sum = 0
 for i in 1...100 {
 sum += i
 }
 print(sum)
 //5050
 //15.2只需循環(huán)固定次數(shù)塞茅,可以省略項名,比如打印10次相同文本
 for _ in 1...10 {
 
 print("學(xué)習(xí)swift")
 }

16 .while循環(huán)執(zhí)行一系列操作 直到條件不成立 使用場合:執(zhí)行次數(shù)未知

var i = 1
 var sum = 0
 
 while i<=100 {
 sum = sum + i
 i += 1
 }
 print(i,sum)
 //當(dāng)i = 101 時跳出循環(huán)
 //101 5050
 //16.1
 var j = 1
 while j<10 {
 print("while循環(huán)示例")
 j += 1
 }
 //輸出是打印了十遍while循環(huán)示例
 //17 判斷
 var temp = 23
 if temp > 35 {
 
 print("開空調(diào)")
 } else {
 print("不用開空調(diào)")
 }

17.1 continue 結(jié)束本次循環(huán) 繼續(xù)循環(huán)僚稿,break跳出整個循環(huán)到此為止

for i in 1...10 {
 
 if i == 5 {
 break
 //        continue
 }
 print(i,"哈哈哈哈??")
 }
 /*
 break
 1 哈哈哈哈??
 2 哈哈哈哈??
 3 哈哈哈哈??
 4 哈哈哈哈??
 continue
 1 哈哈哈哈??
 2 哈哈哈哈??
 3 哈哈哈哈??
 4 哈哈哈哈??
 6 哈哈哈哈??
 7 哈哈哈哈??
 8 哈哈哈哈??
 9 哈哈哈哈??
 10 哈哈哈哈??
 */
 //注意??swift 3.0沒有C類型的for循環(huán)了,用for in吧
  1. 早退語句 :在必需的條件下不滿足的早期階段推出執(zhí)行蟀伸。語句關(guān)鍵字guard蚀同,與if相似缅刽。屬于條件強調(diào)意味很濃的語句。guard let 與 if let 相似蠢络,用于可選擇類型衰猛。guard 有助于提高代碼的可讀性。
var haveMoney = true
 var price : Int? = 3
 
 func chengChe() {
 guard haveMoney else {
 print("沒錢不可以乘坐本次車")
 return
 }
 guard let myMoney = price,myMoney >= 3 else {
 print("錢不夠刹孔,不可以乘坐本次車")
 return
 }
 print("可以乘坐本次車")
 }
 //調(diào)用
 chengChe()//可以乘坐本次車
  1. switch 使用場景:多于兩個條件的
var temp = 30
 
 switch temp {
 
 case 25...34:
 
 print("室外25-34度")
 
 case 35...40:
 
 print("室外35-40度")
 
 default:
 
 print("室外超過40度")
 
 }
 //輸出:室外25-34度
 //19.1 元組匹配 位置
 let xy = (0,2)
 switch xy {
 
 case (0,0):
 print("\(xy)在原點")
 case (_,0):
 print("\(xy)在X軸上")
 case(0,_):
 print("\(xy)在Y軸上")
 case(-2...2,-2...2):
 print("\(xy)在2*2范圍內(nèi)")
 default:
 print("\(xy)不在星球上")
 break
 }
 //輸出 (0, 2)在Y軸上

20 函數(shù) (參數(shù))

func add(a:Int,b:Int) -> (Int){
 return a+b
 }
 let sum = add(a: 2, b: 5)
 print(sum)
 //輸出7
 
 func chengche(price :Int) -> String {
 return "keyi"
 }
 let keyi : String? = chengche(price: 10)
 print(keyi ?? 0)//keyi

20.1定義多個參數(shù)的函數(shù) 用元組

func yuanzuhanshu(a:Int,b:Int,c:Int) -> (Int){
 
 return a + b + c
 }
 
 print(yuanzuhanshu(a: 1, b: 1, c: 1))//3

20.2可以給某個參數(shù)設(shè)置默認(rèn)值

func add2(a:Int,b:Int,c:Int = 20) -> Int {
 return a+b+c
 }
 print(add2(a: 1, b: 2))//23

20.3函數(shù)類型 包含參數(shù)和返回類型的簡寫形式啡省,可以像普通變量那樣使用,一般用于函數(shù)式編程

func create(a:Int,b:Int,action:(Int,Int)->Int)-> Int{
 return action(a,b)
 }
 func adds(a:Int,b:Int) -> Int {
 return a+b
 }
 func jian(a:Int,b:Int) -> Int {
 return a-b
 }
 func cheng(a:Int,b:Int) -> Int {
 return a*b
 }
 func chu(a:Int,b:Int) -> Int {
 return a/b
 }
 let sumq = create(a: 10, b: 5, action: adds)
 let subq = create(a: 10, b: 5, action: jian)
 let chengq = create(a: 10, b: 5, action: cheng)
 let chuq = create(a: 10, b: 5, action: chu)
 print(sumq,subq,chengq,chuq)
 //輸出:15 5 50 2

21 閉包 沒有名稱的函數(shù) 把參數(shù)和返回值放入花括號里

//sorted()髓霞,用于對數(shù)組進(jìn)行排序卦睹,只接受一個函數(shù)類型的參數(shù),描述排序邏輯
 var array = ["D","C","A","B"]
 var newArray = array.sorted()
 print(newArray)//輸出["A", "B", "C", "D"]
 //21 倒序 輸出
 func daoxu(a:String,b:String)-> Bool{
 return a > b
 }
 var hahArray = array.sorted(by: daoxu)
 print(hahArray)
 //用閉包表達(dá)式進(jìn)行改寫
 var cityArray = array.sorted { (a, b) -> Bool in
 return a>b
 }
 print(cityArray)
 //輸出["D", "C", "B", "A"]
 //這就是閉包寫法

21.2閉包的自動推斷

//參數(shù)和“返回類型”可自動推斷方库,單表達(dá)式可以忽略“return”關(guān)鍵詞
 var cityArray2 = array.sorted { (a, b) in
 a>b
 }
 print(cityArray2)
 
 //使用快捷參數(shù)结序,前綴$,從0開始遞增
 var cityArray3 = array.sorted{
 $0 > $1
 }
 print("\(cityArray3)")
 /*
 輸出
 ["D", "C", "B", "A"]
 */
 */

22 枚舉

enum Weather {
 
 case sunny
 case cloudy
 case rainy
 case snow
 case froggy
 
 }
 print(Weather.sunny)
 var todayWeather = Weather.sunny
 switch todayWeather {
 
 case .cloudy:
 print("今天天氣多云")
 
 case .sunny:
 print("今天天氣晴朗")
 
 case .rainy:
 print("今天天氣下雨")
 
 default:
 break
 
 }
 //輸出今天天氣晴朗

22.2附加值 :每一種類型都可以附加一個或多個值纵潦,形式是元組 形式 case(Int,String,...)

enum tianqi {
 
 case qing(Int,Int,String)
 case mai(String,Int)
 }
 //附上附加值:加上元組字面量
 let shanghaiTianQi = tianqi.qing(30, 50, "湛藍(lán)")
 let shanghaiwumai = tianqi.mai("PM2.5", 100)
 
 
 
 
 switch shanghaiwumai {
 case .qing(let ziwai,let liangshai,let dec):
 print("紫外指數(shù):",ziwai,"晾曬:",liangshai,"天顏色:",dec)
 case .mai(let leibie,let index):
 print("類別:",leibie,"指數(shù)",index)
 }
 
 switch shanghaiTianQi {
 case .qing(let ziwai,let liangshai,let dec):
 print("紫外指數(shù):",ziwai,"晾曬:",liangshai,"天顏色:",dec)
 case .mai(let leibie,let index):
 print("類別:",leibie,"指數(shù)",index)
 }
 /*輸出
 類別: PM2.5 指數(shù) 100
 紫外指數(shù): 30 晾曬: 50 天顏色: 湛藍(lán)
 */
 

No End 待續(xù)...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末徐鹤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子邀层,更是在濱河造成了極大的恐慌返敬,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寥院,死亡現(xiàn)場離奇詭異劲赠,居然都是意外死亡,警方通過查閱死者的電腦和手機只磷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門经磅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人钮追,你說我怎么就攤上這事预厌。” “怎么了元媚?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵轧叽,是天一觀的道長。 經(jīng)常有香客問我刊棕,道長炭晒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任甥角,我火速辦了婚禮网严,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嗤无。我一直安慰自己震束,他們只是感情好怜庸,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著垢村,像睡著了一般割疾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嘉栓,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天宏榕,我揣著相機與錄音,去河邊找鬼侵佃。 笑死麻昼,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的趣钱。 我是一名探鬼主播涌献,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼首有!你這毒婦竟也來了燕垃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤井联,失蹤者是張志新(化名)和其女友劉穎卜壕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烙常,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡轴捎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蚕脏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侦副。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖驼鞭,靈堂內(nèi)的尸體忽然破棺而出秦驯,到底是詐尸還是另有隱情,我是刑警寧澤挣棕,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布译隘,位于F島的核電站,受9級特大地震影響洛心,放射性物質(zhì)發(fā)生泄漏固耘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一词身、第九天 我趴在偏房一處隱蔽的房頂上張望厅目。 院中可真熱鬧毯焕,春花似錦鹅很、人聲如沸际看。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沐飘。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瘟忱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工苫幢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留访诱,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓韩肝,卻偏偏與公主長得像触菜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子哀峻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容