Swift簡單入門教程

簡述

 自從蘋果2014年發(fā)布Swift,到現(xiàn)在已經(jīng)兩年多了码邻,而Swift也來到了3.1的版本。最近利用工作之余另假,整理了一份簡單的入門教程像屋。

1.首先,作為一個程序員边篮,大家第一想到的是“Hello,World”己莺,下面闡述OC和Swift中分別是怎樣實現(xiàn)展示“Hello,World”奏甫。

OC:NSLog(@"Hello,World");
Swift: print("Hello,World")

通過上面兩個,我們就能清楚的知道篇恒,在Swift中扶檐,這行代碼就是一個完整的程序,我們不需要為了輸入輸出或者字符串處理導入一個單獨的庫胁艰,全局作用域中的代碼會被自動當做程序的入口點款筑,不需要main函數(shù),也不需要在每個語句結尾寫上分號腾么。
在這里順便插入一個Xcode的Playground奈梳,這是一個簡單易用的代碼預覽功能,在左側輸入代碼解虱,右邊立馬能展示效果攘须。

Playground

簡單值 let 和var

   使用let申明常量,var申明變量殴泰,常量我們只能為它賦值一次于宙,編譯的時候我們并不需要獲取,可以使用多次悍汛,但是不能再次被賦值捞魁。變量是在程序運行過程中,多次被賦值的量离咐。
let myPlaygrounWidth = 20
var myChangeWidth = 30
myChangeWidth = 40

常量或者變量的類型必須和你給它們的值保持一致谱俭,但是,你可以不用明確地聲明類型宵蛀,如果在聲明的同時賦值的話昆著,編譯器會自動推斷類型。例如如下語句:

var age = 10
let string = "myString"

根據(jù)所賦的值术陶,編譯器會自動推斷age為整型凑懂,string為字符串(String)類型,但是你也可以顯式指定類型:
let myString:NSString = "This is String"
但是值永遠不會隱式轉換其他類型瞳别,如果你需要一個值轉換成其他類型征候,必須顯式轉換。

let testView = "The Height is"
let height = 80
let testViewHeight = testView + String(height)

當你取消那個String時候就會報錯:不會隱式轉換其他類型
let testViewHeight2 = testView + height

圖2

當然有一個更方便的轉換字符串的方法:右斜杠(值)
let testViewHeight3 = "testView + \(height)"

數(shù)組和字典

數(shù)組

   數(shù)組在一個有序鏈表存儲了多個類型相同的值祟敛,同一個值可以在數(shù)組的不同位置多次出現(xiàn)。Swift的數(shù)組對它們能存儲的值的類型是明確的兆解,不同于OC中NSArray和NSMutableArray馆铁,OC數(shù)組能存儲任何類型的對象,并且不提供關于這些對象自身的任何信息锅睛,在Swift中埠巨,任何一個特定的數(shù)組所存儲的值历谍,類型總會被確定下來,要么顯式說明辣垒,或者通過類型推斷望侈。如果你創(chuàng)建了一個Int類型數(shù)組,你就不能存儲任何非Int類型的值插入數(shù)組勋桶。

1.數(shù)組的創(chuàng)建

var gameStringArray = ["one","two","three"]
var gameShowArray:[String] = ["stringOne","stringTwo","stringThree"]
var gameArray = ["one","two","three",1](會報錯)
var gameInteArray:[Int] = [1,2,"string"](會報錯)
數(shù)組類型有誤

因為當你顯式的決定了數(shù)組的值的類型就不能再插入其他非這指定類型的值脱衙,但是當并非顯式?jīng)Q定時候可以后面添加as[Any]泛指各種類型,如下所示:

var gameArray = ["one","two","three",1] as [Any]

2.數(shù)組的存取和修改
數(shù)組的取值還是和OC差不多例驹,可以通過索引取值
gameStringArray[1] gameStringArray[2]
當你數(shù)組越界時候會提示報錯如下所示:

數(shù)組越界

數(shù)組的簡單add捐韩、insert、remove和OC差不多鹃锈,只是語法的不同,如下所示:

var gameStringArray = ["one","two","three"]               //["one", "two", "three"]
gameStringArray.append("addString")                       //["one", "two", "three", "addString"]
gameStringArray.insert("insertString", at: 1)            //["one", "insertString", "two", "three", "addString
gameStringArray.remove(at: 2)                           //"two"
print(gameStringArray)                                  // "["one", "insertString", "three", "addString"]\n"

你也可以一次性修改指定范圍的值荤胁,即使將要替換掉的元素的數(shù)量和將要替換成的元素的數(shù)量不一樣,也都可以正確使用屎债,如下所示:
gameStringArray[1...3] = ["changeString","ChangeString2"] //"["one", "changeString", "ChangeString2"]\n"

字典(Dictionary)

字典是一種存儲多個類型相同的值的容器仅政,每個值都和一個唯一的Key(鍵)相對應,這個key在字典中就是其對應值的唯一標識盆驹,和數(shù)組不同圆丹,字典里的元素沒有順序。Swift的字典對它們能存放的鍵和值的類型是明確的召娜。這不同于Objective-C的NSDictionary類和NSMutableDictionary類运褪,Objective-C的字典能存儲任何類型的對象作為鍵或值,并且不提供關于這些對象自身的任何信息玖瘸。在Swift里秸讹,任何一個特定的字典鍵和值,其類型總會被確定下來雅倒,或者通過顯式的類型說明璃诀,或者通過類型推斷

1.字典的初始化

var dictionary = ["Ch":"China","DB":"Dublin"]
var showDic:Dictionary<String,String> = ["Ch":"China","DB":"Dublin","test":"\(1)"]   //假如直接寫1會報錯,顯式?jīng)Q定了類型

2.字典的存取和修改

dictionary["Ch"]                      //"China"  如果字典有就是取值
dictionary["Ch"] = "Chinese"          //修改value
print(dictionary)                     //"["DB": "Dublin", "Ch": "Chinese"]\n"
dictionary.updateValue("Ch", forKey: "Updata")  //擁有key就是修改 沒有就相當于添加
dictionary.removeValue(forKey: "Ch")   //移除  當字典中沒有這個key時候為nil  但是在OC中會報錯閃退

數(shù)組和字典的可變性

 數(shù)組和字典都把多個值存放在一個集合里蔑匣。如果你創(chuàng)建了一個數(shù)組或者字典劣欢,并且將之指定為變量,那么該集合就是可變的裁良,這意味著在集合被創(chuàng)建后凿将,可以通過增加或刪除元素來改變集合的容量大小。相反地价脾,如果你指定一個數(shù)組或字典為常量牧抵,那么該數(shù)組或字典就是不可變的,其容量大小不能被改變。
 對字典來說犀变,不可變還意味著你不能改變字典里某個鍵的值妹孙。一個不可變的字典一旦被設置值后,它里面的內容就不能再改變获枝。
 但是蠢正,數(shù)組的不可變性跟字典略有不同。盡管你不能進行任何可能會改變數(shù)組大小的操作省店,但是你可以給數(shù)組中的某個索引設置一個新的值嚣崭。這使得Swift的數(shù)組在大小固定的情況下能夠達到最佳的性能。

控制流

 使用if和switch來進行條件操作萨西,使用for-in有鹿、for、while和do-while來進行循環(huán)

1.for循環(huán) 在相對OC來說 Swift的功能強大谎脯,慢慢棄用了C語言的
for (<#initialization#>; <#condition#>; <#increment#>) { <#statements#> }
Swift For循環(huán)如下所示:

var nameArray = ["張三","李四","王五","趙六"]
for string in nameArray {
    print(string)
}
for index in 1..<10 {
    print(index)
        // 打印結果為1-9
}
for index in 1...10 {
    print(index)
    //打印結果為1-10
}
for index in nameArray.reversed() {
    print(index)
    //打印結果相反 倒序
}
for (index,i) in nameArray.enumerated() {
    print(index)  //遍歷索引
    print(i)      //遍歷元素
}

2.if else
在if語句中葱跋,條件必須是一個布爾表達式——這意味著像if score { ... }這樣的代碼將報錯,而不會隱形地與 0 做對比源梭。
你可以一起使用if和let來處理值缺失的情況娱俺。這些值可由可選值來代表。一個可選的值是一個具體的值或者是nil以表示值缺失废麻。在類型后面加一個問號來標記這個變量的值是可選的荠卷。具體寫法和OC差不多,少了條件的括號

var score = 50
if score > 20{
}else
{
    score += 1
}

3.while

var x = 2
while x < 10 {
    x = x + 2
}
var m = 2
repeat {                        //do 改成了repeat
    m = m * 2
} while m < 10

函數(shù)和閉包

//定義一個傳入兩個String返回為String的函數(shù)
func test(name:String,eat:String) ->String{
    return "Today\(name)eat \(eat)"
}
//函數(shù)調用
test(name: "張三", eat: "ice")

//定義一個傳入key 和value 返回一個字典的函數(shù)
func redictionary(key:String,value:String) -> Dictionary<String,String>
{
    var dic = [String:String]()
    dic[key] = value
    return dic
}

//函數(shù)調用
print(redictionary(key: "myName", value: "Hou"))
var myDic:Dictionary<String,String> = redictionary(key: "myTest", value: "Test")

//函數(shù)的參數(shù)是可變的烛愧,可以不傳油宜,也可以多個(求平均數(shù))
func getAverage(numbers:Int...) -> Float
{
    var sum = 0
    let count = numbers.count
    for number in numbers {
        sum += number
    }
    let result = sum / count   
    return Float(result)
}
print(getAverage(numbers: 12,22,33))

未完待續(xù),如有錯誤麻煩指點一二

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末怜姿,一起剝皮案震驚了整個濱河市慎冤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沧卢,老刑警劉巖蚁堤,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異但狭,居然都是意外死亡披诗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門立磁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呈队,“玉大人,你說我怎么就攤上這事唱歧〉嘀洌” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵迈喉,是天一觀的道長绍刮。 經(jīng)常有香客問我,道長挨摸,這世上最難降的妖魔是什么孩革? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮得运,結果婚禮上膝蜈,老公的妹妹穿的比我還像新娘。我一直安慰自己熔掺,他們只是感情好饱搏,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著置逻,像睡著了一般推沸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上券坞,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天鬓催,我揣著相機與錄音,去河邊找鬼恨锚。 笑死宇驾,一個胖子當著我的面吹牛,可吹牛的內容都是我干的猴伶。 我是一名探鬼主播课舍,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼他挎!你這毒婦竟也來了筝尾?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤雇盖,失蹤者是張志新(化名)和其女友劉穎忿等,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體崔挖,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡贸街,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了狸相。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片薛匪。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖脓鹃,靈堂內的尸體忽然破棺而出逸尖,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布娇跟,位于F島的核電站岩齿,受9級特大地震影響,放射性物質發(fā)生泄漏苞俘。R本人自食惡果不足惜盹沈,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吃谣。 院中可真熱鬧乞封,春花似錦、人聲如沸岗憋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仔戈。三九已至关串,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間杂穷,已是汗流浹背悍缠。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留耐量,地道東北人飞蚓。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像廊蜒,于是被迫代替她去往敵國和親趴拧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內容