[TOC]
初識(shí)Swift
print("Hello, swift")
第一次給我的四大印象
- Swift是一種面向?qū)ο蟮挠?jì)算機(jī)編繪語言
- Swift不需要引入頭文件或?qū)懺趍ain()內(nèi)昙啄,也不需要在每一句加上分號(hào)(當(dāng)然桑李,若你保有使用某些其他語言的習(xí)慣,如Java捞高、C等加上分號(hào)結(jié)尾亦不會(huì)報(bào)錯(cuò))
- Swift有著強(qiáng)大的類型推斷功能
- Swift簡單的三個(gè)字符的關(guān)鍵字定義一個(gè)變量(var)或常量(let)
標(biāo)識(shí)符的命名規(guī)則
-1. 字母(Unicode)字符谣辞,數(shù)字宋距,下劃線变过,數(shù)字不能開頭
-2. 大小寫敏感
-3. 不能使用關(guān)鍵字做標(biāo)識(shí)符
-4. 駝峰命名法 - 第一個(gè)單詞全小寫以后每個(gè)單詞首字母大寫-
-5. 見名知意
程序設(shè)計(jì)(Program design)
- 程序是一系列指令的集合
- 程序設(shè)計(jì)是給出解決特定問題程序的過程埃元,是軟件構(gòu)造活動(dòng)中的重要組成部分
變量和常量(Constants and Variables)
簡單的使用規(guī)范
- 使用let來聲明常量,使用var來聲明變量
let myConstant = 2016
var myVariable = 2016
- 常量的值只能賦值一次媚狰,但能使用多次
```swift
myVariable = 20160806
- Swift是一個(gè)靜態(tài)類型語言岛杀,在程序運(yùn)行中不能改變變量的類型(Java也是)
- 類型推斷,在Swift中如果可以的話盡可能省略類型標(biāo)記崭孤,讓編譯器自動(dòng)推斷變量或常量的類型
- 如果初始值沒有提供足夠的信息(或者沒有初始值)类嗤,那你需要在變量后面聲明類型
var year: String
- 值永遠(yuǎn)不會(huì)被隱式轉(zhuǎn)換為其它類型,若要將值轉(zhuǎn)換成字符串可以利用字符串差值的方法
// 顯示轉(zhuǎn)換
year = "今年是" + String(myVariable) + "年"
// 字符串插值
year = "今年是\(myConstant)年"
運(yùn)算符(Terminology)
運(yùn)算符類型 | 表達(dá)式 | 簡單的舉例 |
---|---|---|
一元運(yùn)算符(Unary) | -辨宠, 遗锣!... | -a, !false |
二元運(yùn)算符(Binay) | + ,- 嗤形,* 精偿,/ ,% ... | 2 + 3 |
三元運(yùn)算符(Ternary) | a ? b : c ... | 1 == 2 ? true : false |
復(fù)合賦值運(yùn)算(Compound Assignment Operators)
var a = 1
a += 2 // 等同于 a = a + 2
// 類似的還有:-=派殷, *=还最, /=
求模運(yùn)算(Remainder Operator)
a = 9 % 4 // a = 1
分支結(jié)構(gòu)(Branching construct)
-
if. . .else. . . 類型
if question {
answer1 // 條件滿足question,則執(zhí)行answer1
} else {
answer2 // 反之毡惜,則執(zhí)行answer2
}
// 等同于 question ? answer1 : answer2
-
switch. . .case. . . 類型
let question = 1
switch question {
case 1:
answer1
default:
answer2
}
循環(huán)結(jié)構(gòu)(Cycle structure)
1. while. . .循環(huán)
++*有可能一次都不執(zhí)行++
while i <= 10 {
print(“Hello, world")
i += 1
}
2. repeat. . .while. . .循環(huán)
++*至少執(zhí)行一次++
repeat {
print(“Hello, world")
i += 1
} while i <= 10
3. for. . .循環(huán)
++*依次執(zhí)行++
for i in 1...10 {
print(“Hello, world")
}
數(shù)組(Array)
數(shù)組將相同類型的值儲(chǔ)存在一個(gè)有序的列表中,相同的值可以多次出現(xiàn)在一個(gè)數(shù)組的不同位置斯撮。
1. 創(chuàng)建數(shù)組
var array1 = [Int]()
var array2: [Int] = []
var array3 = [99, 12, 34, 7]
var array4 = [Int](count: 100, repeatedValue: 1) // 一百元素经伙,值為0
2. 獲取數(shù)組元素的個(gè)數(shù)
print(array3.count)
print(array4.count)
3. 對(duì)數(shù)組中的元素進(jìn)行遍歷
for (index, value) in array3.enumerate() {
// (index)是對(duì)數(shù)組進(jìn)行索引運(yùn)算(取出指定位置的元素)
print("\(index). \(value)")
// 可以修改數(shù)組元素
if i == 1 {
array3[i] = 777
}
}
// 只讀循環(huán)(在循環(huán)過程中不能修改數(shù)組元素)- str是String類型
for str in array3 {
print(str)
}
4. 向數(shù)組中添加元素
// append - 追加(添加在數(shù)組的最后)
array3.append(25)
array3.append(4)
// insert - 插入(atIndex的值從0開始)
array1.insert(78, atIndex: 2)
array1.insert(78, atIndex: array1.count)
5. 數(shù)組的其它操作
array1.removeAll() // 刪除所有
var array5 = array3 // 數(shù)組的完全復(fù)制
var array5 = array3[1…3] // 自定義復(fù)制位置
var array5 = array1 + array5 // 數(shù)組的加法
let newArray = array.sort(>) // 升序排列后重新生成一個(gè)數(shù)組
array5.sortInPlace() // 排序后代替原數(shù)組
簡單的綜合實(shí)例代碼
1. 數(shù)組的排序
-
簡單選擇排序:每次從剩下的元素中找最小的元素放到對(duì)應(yīng)的位置
var array = [29, 48, 23, 55, 5, 9, 86]
print(array)
// i從第一個(gè)元素循環(huán)到第n-1個(gè)元素
for i in 0..<array.count - 1 {
// 每次循環(huán)開始假設(shè)第一個(gè)元素為最小值(將第一個(gè)元素的索引號(hào)賦給minIndex)
var minIndex = i
// j從i后面一位元素循環(huán)到最后一個(gè)元素
for j in i + 1..<array.count {
// 每次循環(huán)找到更小的元素后將索引賦值給minIndex
if array[j] < array[minIndex] {
minIndex = j
}
}
// 利用元組的方式把最的小元素交換到每次循環(huán)的最前面
(array[i], array[minIndex]) = (array[minIndex], array[i])
}
print(array)
-
冒泡排序:兩兩比較,前面的元素比后面的大就交換位置
// i從第一個(gè)元素循環(huán)到第n-1個(gè)元素
for i in 0..<array.count - 1 {
var swapped = false //當(dāng)前未發(fā)生兩兩交換
// i每循環(huán)一次j就少一次循環(huán)
for j in 0..<array.count - 1 - i {
// 將更大的數(shù)交換到后面
if array[j] > array [j + 1] {
(array[j], array[j + 1]) = (array[j + 1], array[j])
swapped = true // 發(fā)生交換,繼續(xù)循環(huán)
}
}
// 循環(huán)若未發(fā)生兩兩交換帕膜,因此該數(shù)組已經(jīng)排好枣氧,則跳出循環(huán)
if !swapped {
break
}
}
print(array)
2. 百元百雞(公雞5元/只,母雞3元/只垮刹,小雞3只/元)
// 窮舉法(窮盡所有的可能性直到找到正確答案)
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)只")
}
}
}
3. Craps(雙骰子游戲)
func roll() -> Int {
return Int(arc4random_uniform(6)) + 1
}
var money = 1000
repeat {
print("玩家總資產(chǎn):¥\(money)元")
var debt: Int
repeat {
print("請(qǐng)下注:",terminator:"")
debt = inputInt()
}while debt <= 0 || debt > money
var needsGoOn = false
let firstPoint = roll() + roll()
print("玩家第一次搖出了\(firstPoint)點(diǎn)")
switch firstPoint {
case 7, 11:
money += debt
print("玩家勝4锿獭!荒典!")
case 2, 3, 12:
money -= debt
print("莊家勝@医佟!寺董!")
default:
needsGoOn = true // 游戲繼續(xù)
}
while needsGoOn {
let currentPoint = roll() + roll()
print("玩家搖除了\(currentPoint)點(diǎn)")
if currentPoint == 7 {
money -= debt
print("莊家勝8苍恪!遮咖!")
needsGoOn = false
}
else if currentPoint == firstPoint {
money += debt
print("玩家勝L沧帧!御吞!")
needsGoOn = false
}
}
}while money > 0
print("你破產(chǎn)了B蠊俊!陶珠!")
抄家伙内列,開始干吧!還等什么1陈省;扒啤!(づ ̄ 3 ̄)づ