邂逅Swift
學(xué)習(xí)Swift拧揽,我們遇到的第一個程序:
print("Hello,world!")
在Swift中踱卵,我們不需要單獨創(chuàng)建一個主函數(shù)main,在項目創(chuàng)建的過程中,系統(tǒng)會自動生成一個叫"main.swift"的文件失受,我們將主函數(shù)中的代碼寫在其中趴樱。
變量和常量
常量:
常量是在程序運行時,不能被修改的量尚卫;常量有不同的類型归榕,常見的有整數(shù)型ex:1,2,3; 浮點數(shù)型ex:0.0,1.1; 字符串型ex:"orange","lemon","litch"等,常量一般從其字面形式就可以判斷類型,這種常量稱為直接常量或字面常量。
let constant: Int
let constant = 10
變量:
變量來源于數(shù)學(xué),是計算機語言中能存儲計算結(jié)果或表示值抽象概念余寥。變量可以通過變量名訪問,在程序運行過程中特石,同一個變量的值可能不變,也可能會不斷的變化鳖链。
var a = 1
var b = 1
a = a + b
print(a)
此程序的運算結(jié)果為:
其中我們可以看到姆蘸,變量a的值是隨著程序運行而變化的。
運算符
常見的一元運算符為: "+"芙委、"-"
在Swift中逞敷,最常見的幾種二元運算符依然是加、減灌侣、乘推捐、除
print("請輸入第一個數(shù):")
let a = inputDouble()
print("請輸入第二個數(shù):")
let b = inputDouble()
print("\(a) + \(b) = \(a + b)")
print("\(a) - \(b) = \(a - b)")
print("\(a) * \(b) = \(a * b)")
print("\(a) / \(b) = \(a / b)")
print("\(a) % \(b) = \(a % b)")
在進行加、減侧啼、乘牛柒、除運算左右兩邊類型必須一致。
在Swift中痊乾,小數(shù)的表示方法為:
// 兩種小數(shù)的表示方法
let x: Double = 321
let y = 123.0
print(x * y)
print(x / y)
在運算過程中皮壁,值得注意的是:
整數(shù)除以0產(chǎn)生運行時異常;
小數(shù)除以0可能的結(jié)果是inf/-inf/nan
inf: infinity
nan: not a number
在Swift中符喝,還有常用的二元運算符 "%"、"&&"甜孤、"||"
% - 模運算协饲,對參數(shù)求余數(shù)(求模)
&& - 短路與運算
|| - 短路或運算
let year = 2016
if year % 4 == 0 && year % 100 != 0||year % 400 == 0 {
print("\(year)年是閏年")
}
else {
print("\(year)年不是閏年")
}
標(biāo)識符命名規(guī)則
1.字母(Unicode字符)、數(shù)字缴川、下劃線茉稠,數(shù)字不能開頭
2.大小寫敏感
3.不能使用關(guān)鍵字做標(biāo)識符
4.駝峰標(biāo)識(駝峰命名法) - 第一個單詞全小寫,以后每個單詞首字母大寫
5.見名知意
分支結(jié)構(gòu)
順序結(jié)構(gòu)的程序雖然能解決計算把夸、輸出等問題而线,但不能做判斷再選擇。對于要先做判斷再選擇的問題就要使用分支結(jié)構(gòu)。分支結(jié)構(gòu)的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑膀篮,而不是嚴(yán)格按照語句出現(xiàn)的物理順序嘹狞。分支結(jié)構(gòu)的程序設(shè)計方法的關(guān)鍵在于構(gòu)造合適的分支條件和分析程序流程,根據(jù)不同的程序流程選擇適當(dāng)?shù)姆种дZ句誓竿。
分支結(jié)構(gòu)中磅网,最簡單的是單一分支結(jié)構(gòu),其結(jié)構(gòu)的基本構(gòu)成為:
if (條件語句) {
}
else {
}
另外除了這種if - else的基本結(jié)構(gòu)筷屡,當(dāng)遇到分支結(jié)構(gòu)有多種情況時涧偷,還可以使用switch - case ,而且這個結(jié)構(gòu)與if - else結(jié)構(gòu)還可以嵌套使用:
print("請輸入你的月薪:",terminator: "")
let salary = inputInt() * 13
if salary >= 0 {
switch salary {
case 0:
print("你丫就是個無業(yè)游民")
case 1...30000:
print("你是一個小碼畜")
case 30001...60000:
print("你是一個小碼奴")
case 60001...100000:
print("你是一個臭碼農(nóng)")
case 100001...200000:
print("你是一個IT民工")
case 200001...500000:
print("你是一個優(yōu)秀的IT工程師")
case 500001..<10000000:
print("你是IT精英")
case 10000000..<100000000:
print("你是IT大哥,我服!")
default:
print("你是頭上有光環(huán)的IT領(lǐng)袖毙死,求帶")
}
}
else {
print("你丫輸入錯誤燎潮!")
}
通過以上結(jié)構(gòu)可以看出,在處理不同的條件判斷與不同的情況選擇的時候扼倘,可以靈活的選擇不同的分支結(jié)構(gòu)進行判斷與處理确封。
循環(huán)結(jié)構(gòu)
循環(huán)結(jié)構(gòu)可以很大程度減少源程序重復(fù)書寫的工作量,用來描述重復(fù)執(zhí)行某段算法的問題唉锌,這是程序中最能發(fā)揮計算機特長的結(jié)構(gòu)隅肥。
在Swift中,基本的循環(huán)結(jié)構(gòu)有三種類型:
for循環(huán):
for i in 1...10 {
print("\(i).Hello, world")
}
while循環(huán):
var i = 1
while i <= 10 {
print("\(i)Hello, World!")
i += 1
}
repeat - while循環(huán):
var i = 1
repeat {
print("\(i).Hello, world")
i += 1
} while i <= 10
循環(huán)結(jié)構(gòu)可以看成是一個條件判斷語句和一個向回轉(zhuǎn)向語句的組合袄简。另外腥放,循環(huán)結(jié)構(gòu)的三個要素:循環(huán)變量、循環(huán)體和循環(huán)終止條件绿语。循環(huán)結(jié)構(gòu)在程序框圖中是利用判斷框來表示秃症,判斷框內(nèi)寫上條件,兩個出口分別對應(yīng)著條件成立和條件不成立時所執(zhí)行的不同指令吕粹,其中一個要指向循環(huán)體种柑,然后再從循環(huán)體回到判斷框的入口處。
用循環(huán)結(jié)構(gòu)可以處理某些復(fù)雜的邏輯問題匹耕,將自己并不知道結(jié)果的復(fù)雜計算交給計算機處理聚请,例如,使用窮舉法:
用窮舉法處理100元錢買100只雞的問題稳其,其中驶赏,公雞5元一只,母雞3元一只既鞠,小雞1元三只:
for x in 0...20 {
for y in 0...33 {
let z = 100 - x - y
if 5 * x + 3 * y + z / 3 == 100 && z % 3 == 0 {
print("公雞:\(x),母雞:\(y),小雞:\(z)")
}
}
}
最后煤傍,我們通過運行程序,得到了所有滿足條件的結(jié)果:
數(shù)組
1.創(chuàng)建數(shù)組
所謂數(shù)組嘱蛋,就是相同數(shù)據(jù)類型的元素按一定順序排列的集合蚯姆,就是把有限個類型相同的變量用一個名字命名五续,然后用編號區(qū)分他們的變量的集合,這個名字稱為數(shù)組名龄恋,編號稱為下標(biāo)疙驾。組成數(shù)組的各個變量稱為數(shù)組的分量,也稱為數(shù)組的元素篙挽,有時也稱為下標(biāo)變量荆萤。
var array1 = [String]()
var array2: [String] = []
var array3 = ["red", "yellow", "orange", "green", "blue"]
var array4 = [String](count: 100, repeatedValue: "")
2.獲取數(shù)組元素個數(shù)
print(array1.count)
print(array2.count)
print(array3.count)
print(array4.count)
3.對數(shù)組中的元素進行遍歷
for i in 0..<array3.count {
// []是對數(shù)組進行下標(biāo)運算(取出指定位置的元素)
print(array3[i])
if i == 1 {
array3[i] = "litch"
}
}
// 只讀循環(huán)(在循環(huán)過程中不能改變數(shù)組元素)
for str in array3 {
print(str)
}
4.向數(shù)組中添加元素
// append 追加
// insert 插入
array1.append("strawberry")
array1.append("pear")
array1.insert("waxberry", atIndex: 0)
array1.insert("watermelon", atIndex: 2)
array1.insert("lenmon", atIndex: array1.count) //用insert加到最后,等效于append
print(array1)
5.刪除數(shù)組中的元素
array1.removeAtIndex(2)
print(array1)
array1.removeFirst()
print(array1)
array1.removeAll()
print(array1)
6.數(shù)組的復(fù)制
var array5 = array3
array5[0] = "pitaya"
print(array3)
print(array5)
var array6 = array3[1...3]
print(array6)
for (index, value) in array3.enumerate() {
print("\(index),\(value)")
}
7.對數(shù)組中元素進行排序:
1.Swift中程序自帶的排序方法:
var array = [29, 98, 35, 12, 47, 66, 53, 79]
let newArray = array.sort(>)
print(array)
print(newArray)
array.sortInPlace()
print(array)
var array1 = ["apple", "orange" , "watermelon" , "lemon"]
let newArray1 = array1.sort(>)
print(array1)
print(newArray1)
array1.sortInPlace()
print(array1)
2.簡單選擇排序:
var array = [29, 98, 35, 12, 47, 66, 53, 79]
for i in 0..<array.count {
var minIndex = i
for j in i + 1..<array.count {
if array[j] < array[minIndex] {
minIndex = j
}
}
(array[i],array[minIndex]) = (array[minIndex],array[i])
}
print(array)
3.冒泡排序:
var array = [29, 98, 35, 12, 47, 66, 53, 79]
for i in 0..<array.count - 1 {
var swapped = false
for j in 0..<array.count - 1 - i {
if array[j] > array[j + 1] {
(array[j],array[j + 1]) = (array[j + 1],array[j])
swapped = true
}
}
if swapped == false {
break
}
}
print(array)