Swift第一周學(xué)習(xí)總結(jié)

Swift-楊夏

[TOC]

要點(diǎn)總結(jié)

  • 程序設(shè)計(jì)
  • 變量和常量
  • 運(yùn)算符
  • 分支結(jié)構(gòu)
  • 循環(huán)結(jié)構(gòu)
  • 數(shù)組

具體學(xué)習(xí)情況總結(jié)

第一天

Swift語(yǔ)言簡(jiǎn)介

Swift,蘋(píng)果于2014年WWDC(蘋(píng)果開(kāi)發(fā)者大會(huì))發(fā)布的新開(kāi)發(fā)語(yǔ)言,可與Objective-C*共同運(yùn)行于Mac OS和iOS平臺(tái),用于搭建基于蘋(píng)果平臺(tái)的應(yīng)用程序。它是一款易學(xué)易用的編程語(yǔ)言,而且它還是第一套具有與腳本語(yǔ)言同樣的表現(xiàn)力和趣味性的系統(tǒng)編程語(yǔ)言。Swift的設(shè)計(jì)以安全為出發(fā)點(diǎn),以避免各種常見(jiàn)的編程錯(cuò)誤類(lèi)別。

標(biāo)識(shí)符的命名規(guī)則
1. 字母(Unicode字符)、數(shù)字、下劃線(xiàn),數(shù)字不能開(kāi)頭
2. 大小寫(xiě)敏感
3. 不能使用關(guān)鍵字做標(biāo)識(shí)符
4. 駝峰標(biāo)識(shí) - 第一個(gè)單詞全小寫(xiě)以后每個(gè)單詞首字母大寫(xiě)
5. 見(jiàn)名知意  見(jiàn)名知意
調(diào)試(debug)
    在懷疑出問(wèn)題的代碼處設(shè)置斷點(diǎn)程序會(huì)執(zhí)行到斷點(diǎn)處停下來(lái)
    然后使用單步執(zhí)行并觀察程序中所有的變量常量的值
    找到出問(wèn)題的代碼
作用域
變量或常量只在定義它的花括號(hào)中起作用
     - 變量或常量的作用域越小越好
     - 能用常量的地方就不使用變量(編譯器會(huì)優(yōu)化代碼)
常量和變量
var a = 1       //變量
let b = 3       //常量

輸出的幾種類(lèi)型
- print("\(a) / \(b) = \(a / b)",terminator: "\t")//字符串插值
- print(String(format: "周長(zhǎng): %.2f", perimeter))//小數(shù)點(diǎn)后保留2位
- NSLog(String(format: "周長(zhǎng): %.2f", a))
- print("周長(zhǎng)" ,(2 * M_PI * a))

第二天

數(shù)據(jù)類(lèi)型
  • 一般情況下,表示整數(shù)首選Int, 表示小數(shù)首選Double,表示字符串首選String,表示真假首選Bool
運(yùn)算符
  • 算術(shù)運(yùn)算符: + - * / %
  • 關(guān)系運(yùn)算符: == != > >= < <=
  • 短路運(yùn)算符: && ||
  • 三元條件運(yùn)算符:question ? answer1 : answer2
  • 元組(tuple):用一個(gè)變量或者一個(gè)常量保存多項(xiàng)數(shù)據(jù)信息的類(lèi)型
注意要點(diǎn)
1. Swift中加減乘除運(yùn)算的左右兩邊類(lèi)型必須一致
2. 在Swift中如果可以的話(huà)盡可能省略類(lèi)型標(biāo)記,讓編譯器自己推斷
3. 類(lèi)型安全 - Swift是一個(gè)靜態(tài)類(lèi)型語(yǔ)言,在程序運(yùn)行時(shí)不能改變變量的類(lèi)型
4. 整數(shù)除以0產(chǎn)生運(yùn)行時(shí)異常,小數(shù)除以0可能的結(jié)果是inf/-inf/nan
5. 整數(shù)除以整數(shù)結(jié)果也是整數(shù)(不會(huì)出現(xiàn)小數(shù)部分)
6. 字符串也可以進(jìn)行比較(bool)
7. 合理的運(yùn)用三元條件運(yùn)算符可以是代碼更簡(jiǎn)潔
8. 元組交換兩個(gè)變量的值 — (x, y) = (y, x)
分支結(jié)構(gòu)
  • if - else 語(yǔ)句
let hasDoorKey = false
let knowsOverridePassword = true
if hasDoorKey || knowsOverridePassword {
    print("Welcome!")
} else {
    print("ACCESS DENIED")
}
  • switch - case 語(yǔ)句
let face = Int(arc4random_uniform(3)) + 1  //產(chǎn)生隨機(jī)數(shù)(1-3)
switch face {
case 1:
    print("1")
case 2:
    print("2")
default:
    print("3")
}
課后練習(xí)(精粹部分)

問(wèn)題:輸入年和月 輸出這個(gè)月有多少天

print("請(qǐng)輸入年和月用空格隔開(kāi)(例如: 1980 2)", terminator: "")
let year = inputInt()
let month = inputInt()
let day: Int
if month < 1 || month > 12 {
    print("你的輸入有誤!")
    exit(0) // 程序退出不再執(zhí)行
}
else if month == 2 {
    day = year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ? 29 : 28
}
else if month == 4 || month == 6 || month == 9 || month == 11 {
    day = 30
}
else {
    day = 31
}
print("\(year)年\(month)月有\(zhòng)(day)天")

第三天

循環(huán)結(jié)構(gòu)
  • for循環(huán)
var sum = 0
for i in 1...100 {
    sum += i
}
print(sum)
  • while循環(huán) - 有可能一次都不執(zhí)行
var sum = 0
var i = 1
while i <= 100 {
    sum += i
    i += 1
}
print(sum)
  • repeat-while循環(huán) - 至少執(zhí)行一次
var sum = 0
var i = 1
repeat {
    sum += i
    i += 1
} while i <= 100
print(sum)
課后練習(xí)(精粹部分)

問(wèn)題:1 - 100 以?xún)?nèi)猜數(shù)字游戲

let answer = Int(arc4random_uniform(100)) + 1
var thyAnswer: Int
var counter = 0
repeat {
    counter += 1
    print("請(qǐng)輸入你猜的數(shù)字: ", terminator: "")
    thyAnswer = inputInt()
    if thyAnswer > answer {
        print("小一點(diǎn)")
    }
    else if thyAnswer < answer {
        print("大一點(diǎn)")
    }
    else {
        print("恭喜你猜對(duì)了!你總共猜了\(counter)次")
    }
} while thyAnswer != answer

if counter > 7 {
    print("你的智商太不可思議了!")
}

第四天

強(qiáng)化練習(xí)

問(wèn)題1:Craps賭博游戲

游戲介紹:
搖兩個(gè)骰子第一次;7或11玩家勝,2或3或12莊家勝,其他點(diǎn)(記錄)-游戲繼續(xù)
第二次及以上:搖出第一次記錄的點(diǎn)數(shù),玩家勝或者搖出7點(diǎn)莊家勝
import Foundation
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("玩家勝!!!")
    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("莊家勝!!!")
            needsGoOn = false
        }
        else if currentPoint == firstPoint {
            money += debt
            print("玩家勝!!!")
            needsGoOn = false
        }
    }
} while money > 0
print("你破產(chǎn)了!!!")

問(wèn)題2:買(mǎi)雞

問(wèn)題描述:公雞5元1只、母雞3元1只、小雞1元3只,現(xiàn)在有100元買(mǎi)100只雞,請(qǐng)列出所有可能的結(jié)果
GET:窮舉法(窮盡所有的可能性直到找到正確答案)
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)")
        }
    }
}

問(wèn)題3.用號(hào)打印菱形圖案*

import Foundation
print("row = ", terminator: "")
let row = inputInt()
for i in 0..<row {
    // 通過(guò)行號(hào)計(jì)算出星星的數(shù)量和空格的數(shù)量
    // 先打印空格再打印星星就可以了
    let star: Int
    let space: Int
    if i <= row / 2 {   // 上半部分
        star = 2 * i + 1
    }
    else {              // 下半部分
        star = 2 * (row - i) - 1
    }
    space = (row - star) / 2
    for j in 0..<space {
        print(" ", terminator: "")
    }
    for j in 0..<star {
        print("*", terminator: "")
    }
    print("")
}

能力提升
  1. 輸入一個(gè)正整數(shù), 判斷是不是素?cái)?shù)(質(zhì)數(shù))并打印1-100之間所有的素?cái)?shù)
  2. 找出100-999之間所有的水仙花數(shù) — 水仙花數(shù)153 = 1^3 + 5^3 + 3^3
  3. 猴子吃桃 — 有一堆桃子,一天吃一半還多一個(gè),第十天只剩下一個(gè)桃子,問(wèn)桃子有多少。
  4. 求完美數(shù)
  5. 最大公約數(shù) (Greatest Common Divisor)、最小公倍數(shù) (Least Common Multiplier)
  6. 斐波拉切數(shù)列 1 1 2 3 5 8 …

第五天

數(shù)組

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

var array1 = [String]()
var array2: [String] = []
var array3 = ["apple", "grape", "banana", "apple", "orange"]
var array4 = [String](count: 100, repeatedValue: "")

2. 獲取數(shù)組元素個(gè)數(shù)

print(array1.count)

3. 對(duì)數(shù)組中的元素進(jìn)行遍歷

for index in 0..<array3.count {
    // []是對(duì)數(shù)組進(jìn)行下標(biāo)運(yùn)算(取出指定位置的元素)
    print(array3[index])
    if index == 1 {
        array3[index] = "litch"
    }
}
print(array3)

// 只讀循環(huán)(在循環(huán)過(guò)程中不能修改數(shù)組元素)
for str in array3 {
    print(str)
}
for (index, value) in array3.enumerate() {
    print("\(index). \(value)")
}

4.向數(shù)組中添加元素

array1 += ["strawberry"]
array1.append("pear")
array1.insert("waxberry", atIndex: 0)
array1.insert("watermelon", atIndex: 2)
array1.insert("lemon", atIndex: array1.count)

5. 從數(shù)組中刪除元素

array1.removeAtIndex(2)
print(array1)
array1.removeFirst()
print(array1)
array1.removeAll()
print(array1)

6. 數(shù)組的復(fù)制

var array5 = array3
var array6 = array3[1…3]

7. 數(shù)組的+運(yùn)算

let array7 = array1 + array3
print(array7)
數(shù)組的排序(3種)
對(duì)下面數(shù)組排序:
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 {
        break
    }
}
print(array)
  • 簡(jiǎn)單選擇排序: 每次從剩下元素中找最小的元素放到對(duì)應(yīng)的位置
for i in 0..<array.count - 1 {
    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)
  • 直接調(diào)用函數(shù)
let newArray = array.sort(>)
print(array)
print(newArray)
array.sortInPlace()
print(array)
**--更多精彩內(nèi)容請(qǐng)關(guān)注:Youth丶夏夏--**
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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