Swift學(xué)習(xí)之路

第二周學(xué)習(xí)小結(jié)

概述:

本周開始系統(tǒng)的對Swift語法部分進行學(xué)習(xí)。
Swift是面向?qū)ο蟮木幊桃虑耍谖业睦斫庵泄远嫦驅(qū)ο缶幊叹褪鞘紫葎?chuàng)建一個對象,然后通過向創(chuàng)建的對象發(fā)送消息指令來操作對象具练,使之滿足設(shè)計所需乍构。在大學(xué)曾經(jīng)學(xué)習(xí)過一些編程語言,但由于學(xué)習(xí)時間少扛点,內(nèi)容少哥遮,且學(xué)習(xí)目的僅是為了應(yīng)付考試。所以對學(xué)習(xí)Swift并沒有太多的幫助陵究。但是曾經(jīng)的學(xué)習(xí)經(jīng)歷讓我明白學(xué)好編程需要強大的邏輯思維作基礎(chǔ)眠饮,在編程過程中,很多時候需要你講自然語言翻譯成電腦語言铜邮,而為了精簡代碼仪召,你需要對復(fù)雜的自然語言進行提煉重組,盡量讓你寫出的代碼精簡高效松蒜,具備自然語言所描述的功能且具有高度的邏輯性扔茅,這樣即達到了預(yù)期的效果,又讓代碼變的美好秸苗。下面通過每一天的學(xué)習(xí)來進行總結(jié)召娜。

2016.08.01

1.swift可輸入類型
let myName = "龔資深"
let myClass : String
myClass = "Ios1605"
var myAge = 22
let myScore : Double 
myScore = 99.5

這里需要說明的是,swift可以輸出整型數(shù)和浮點型數(shù)惊楼,以及字符串等萤晴,這些都和大多數(shù)編程語言類似吐句,但是swift擁有強大的類型推斷能力,可以直接賦值店读,賦值以后該變量的類型久確定嗦枢。注意所有的字符都要在英文輸入法的狀態(tài)下才可以。

2.swift運算符

按照參與運算的元素來分屯断,可以將swift的運算符分為一元文虏、二元和三元運算符。

print("加法運算結(jié)果\(a + b)")
print("\(a) - \(b) = \(a - b)")
print("\(a) * \(b) = \(a * b)")
print("\(a) / \(b) = \(a / b)")
print("\(a) % \(b) = \(a % b)") //求余數(shù)

以上是算數(shù)運算符

a > b
a < b
a == b
a != b
a >= b
a <= b

以上為關(guān)系運算符

if a == b && c == d{

}
else if a == b || e == f

以上是短路運算符殖演。即都成立為真(首行)氧秘,或一個成立即可。

let c = a < b ? a : b

唯一的三元運算符
問好前面的條件為真趴久,取冒號前面的值丸相,否則取冒號后面的值。注意問好前打空格彼棍,否則會被認為是可空類型灭忠。

2016.08.02

元組(tuple)

用一個變量或者一個常量就能保存多項數(shù)據(jù)信息的類型

var stu = (1001, "王大錘", true, 23)
print(stu.0)
print(stu.1)
print(stu.2)
print(stu.3)

let stu: (id: Int, name: String, gender: Bool, age: Int) = (1001, "王大錘", true, 23)
print(stu.id)
print(stu.name)

存儲和調(diào)用信息

(x,y) = (y,x)
print(x,y)

可以用元組來交換信息

switch選擇
switch a{
case 1:
case 2:
default:
}

casei相當于入口,會根據(jù)a值的多少進入相應(yīng)的窗口完成指令座硕。注意弛作,無論什么情況必須有defaule。

2016.08.03

循環(huán)結(jié)構(gòu)

本日主要講解了swift中的循環(huán)結(jié)構(gòu)华匾,主要分為三大類映琳,即for循環(huán),while循環(huán)和repeat-while循環(huán)蜘拉。

for i in 1..<10{
    print("\(i).hello world")
} cewwasz
for _ in 1...10{     //省略了參數(shù)
    print("hello world")
}

for循環(huán)主要針對需要滿足一定循環(huán)次數(shù)的需求萨西,比如很明確的需要盡心多少次循環(huán),需要對某些事物進行便利的時候旭旭,其條件布明顯則選用for循環(huán)

var i = 0
while i < 10{
    print("hello world")
    i += 1
}

while循環(huán)谎脯,在滿足while后面的條件的情況下就會循環(huán),這種循環(huán)結(jié)構(gòu)在條件明確的情況下您机,可以選用,一直到條件不再成立為止

var i = 0
repeat{
    print("hello world")
    i += 1
}while i < 10


與while循環(huán)不一樣的是年局,無論條件是什么际看,該循環(huán)都會無條件執(zhí)行一次,然后再判斷條件是否還成立矢否,成立的話就繼續(xù)循環(huán)仲闽,不成立久終止循環(huán)。

2016.08.04

程序就是指令的結(jié)合僵朗,而再復(fù)雜的程序也是基于簡單的循環(huán)選擇分支等結(jié)構(gòu)組成的屑彻。老師重點讓我們掌握了四個小程序

1.賭博
func roll() -> Int{
    return Int(arc4random_uniform(6)) + 1
}

var money = 1000

repeat{
    print("玩家總資產(chǎn):¥\(money)元")
    var debt : Int
    repeat{
        print("請下注:", terminator:" ")
        debt = inputInt()
    }while debt <= 0 || debt > money

    var needsGoOn = false
    let firstPoint = roll() + roll()
    print("玩家搖出了\(firstPoint)點")
    switch firstPoint{
    case 7, 11:
        money += debt
        print("玩家勝")
    case 2,3,12:
        money -= debt
        print("莊家勝")
    default:
        needsGoOn = true
    }

    while needsGoOn{
        let currentPoint = roll() + roll()
        print("玩家搖出了\(currentPoint)點")
        if currentPoint == 7{
            money -= debt
            print("莊家勝")
            needsGoOn = false
        }
        else if currentPoint == firstPoint{
            print("玩家勝")
            money += debt
            needsGoOn = false
        }
    }
}while money > 0
if money <= 0
{
    print("你破產(chǎn)了")
}

在這段程序中,核心的矛盾是顶吮,第一次搖出的兩個數(shù)之和為7和11時社牲,玩家勝利;為2悴了,3搏恤,12時莊家勝,若為其他數(shù)則繼續(xù)搖湃交,搖到7時莊家勝熟空,搖到于第一次搖的一樣的數(shù)時玩家勝。因此我們應(yīng)該先寫出第一次搖的情況搞莺。仔細琢磨一下息罗,只是一次分情況的搖,不用循環(huán)才沧,且分支結(jié)構(gòu)明顯迈喉,所以選用switch完成第一次搖的情況,如下:

switch firstPoint{
    case 7, 11:
        money += debt
        print("玩家勝")
    case 2,3,12:
        money -= debt
        print("莊家勝")
    default:
        needsGoOn = true
    }

這里的needgoon是表示糜工,如果第一次搖沒有結(jié)束游戲弊添,就要進行下一次。注意這是一個條件捌木,且不需要無條件進行第一次油坝,所以選用while來進行接下來的搖數(shù):

 while needsGoOn{
        let currentPoint = roll() + roll()
        print("玩家搖出了\(currentPoint)點")
        if currentPoint == 7{
            money -= debt
            print("莊家勝")
            needsGoOn = false
        }
        else if currentPoint == firstPoint{
            print("玩家勝")
            money += debt
            needsGoOn = false
        }
    }

先梳理好思路,找到主要矛盾刨裆,完成主要的代碼部分澈圈,再進行修飾,加入賭金本金之類的帆啃,就完成了這一段代碼

2.猜數(shù)字
func roll() -> Int{
    return Int(arc4random_uniform(99)) + 1
}
var yournum : Int
let compnum = roll()
repeat{
    print("請輸入你的數(shù)字:")
    yournum = inputInt()
    if yournum > compnum{
    print("little")
    }
    else if yournum < compnum{
    print("more")
    }
    else{
    print("good")
    }
}while yournum != compnum

這段代碼用了if else的分支結(jié)構(gòu)瞬女,主要作用是用于單一方面的條件,成立如何努潘,不成立如何诽偷。當然也可以有多個if語句。

2016.08.05

1.數(shù)組
var array1 = [Int]()//空數(shù)組
var array: [Int] = []//空數(shù)組
var array3 = [99, 12, 34, 156, 7]
var array4 = [Int](count: 100, repeatedValue: 1)
var array5 = [String]()
var array6 = [String](count: 4, repeatedValue: "kkk")
var array7 = [";;", "kkk", "djiwodj"]


數(shù)組的創(chuàng)建有多種方法疯坤,但直接復(fù)制法(3)和指定數(shù)量(4)用的較多

print(array7.count)

獲取數(shù)組元素個數(shù)

for index in 0..<array7.count{
    //[]是對數(shù)組進行下標(索引)運算(取出指定位置的元素)
    print(array7[index])
    if index == 1{
        array7[index] = "de"
    }
}
//只讀循環(huán)(每個元素都要遍歷报慕,在循環(huán)過程中不能修改數(shù)組元素)
for str in array7{
    print(str)
}

對數(shù)組中的元素進行遍歷

array1.append(1)
array1.append(3) // 追加,放在前一個的后面
array1.insert(4, atIndex: 0)// 插入压怠,前面是值眠冈,后面是位置參數(shù)
array1.insert(7, atIndex: array1.count) //插到最后一個

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

array1.removeAll()
array1.removeAll(keepCapacity: <#T##Bool#>)// true久只刪數(shù)據(jù),保留空間
array1.removeAtIndex(<#T##index: Int##Int#>) //刪指定位置的
array1.removeFirst() //刪第一個
array1.removeFirst(<#T##n: Int##Int#>) //刪前面n個

刪除的方法還有很多菌瘫,這里是一部分

let array8 = array7  //復(fù)制全部
var array9 = array7[1...2] // [1..<2] // 復(fù)制一部分

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

let array10 = array1 + array3

同種類型數(shù)組相加,可以合并

數(shù)組是對大量數(shù)據(jù)進行操作的有效方法蜗顽,通過運用數(shù)組和循環(huán)選擇等結(jié)構(gòu)的組合應(yīng)用布卡,通過簡單的代碼完成復(fù)雜的問題。

接前一天的四個程序雇盖,接下來的兩個就搖用到數(shù)組

2.冒泡排序
var array = [44, 78, 2, 39, 89, 12, 66]
for j in 0..<array.count - 1{
    var stop = false
    for i in 0..<array.count - 1 - j{
        if array[i] > array[i + 1] {
            (array[i], array[i + 1]) = (array[i + 1], array[i])
            stop = true
        }
    }
    if !stop{
        break
    }
}
print(array)

冒泡法排序的核心矛盾是兩兩比較忿等,將兩者中較大的數(shù)換到后面去,然后每遍歷一次就將一個最大的數(shù)放在最后刊懈。寫stop是當檢測到?jīng)]有交換但循環(huán)未完这弧,提前結(jié)束循環(huán)保證效率。

3.簡單選擇
var array = [44, 78, 2, 39, 89, 12, 66] 
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)
}

簡單選擇是首先確定一個存放目標值的變量虚汛,這里為minindex匾浪,然后初始默認與i代表的數(shù)一致,通過j對i以后的數(shù)進行遍歷卷哩,當找到比minindex更小的數(shù)以后蛋辈,講minindex的值(這里的值表示數(shù)組的索引號,初始為i)與j代表的索引號交換将谊,第一次循環(huán)完后minindex索引代表的值就是數(shù)組的最小值冷溶,再遇第一個值交換,然后i= i+1尊浓,接著繼續(xù)做同樣的事逞频,指示循環(huán)次數(shù)減少1。

4.百雞百元
for i in 0...20{
    for j in 0...33{
        let n = 100 - i - j
        if n % 3 == 0 && i * 5 + j * 3 + n / 3 == 100{
            print(i,terminator: " ")
            print(j,terminator: " ")
            print(n)
        }
    }
}

這是一個窮舉法栋齿,將所有情況遍歷一次苗胀,求解。值得注意的是瓦堵,第三個調(diào)節(jié)寫成循環(huán)時基协,程序會因為不夠優(yōu)化而報錯。這也告訴我們要學(xué)會優(yōu)化程序菇用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末澜驮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惋鸥,更是在濱河造成了極大的恐慌杂穷,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卦绣,死亡現(xiàn)場離奇詭異耐量,居然都是意外死亡,警方通過查閱死者的電腦和手機迎卤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門拴鸵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玷坠,“玉大人蜗搔,你說我怎么就攤上這事劲藐。” “怎么了樟凄?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵聘芜,是天一觀的道長。 經(jīng)常有香客問我缝龄,道長汰现,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任叔壤,我火速辦了婚禮瞎饲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘炼绘。我一直安慰自己嗅战,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布俺亮。 她就那樣靜靜地躺著驮捍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪脚曾。 梳的紋絲不亂的頭發(fā)上东且,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音本讥,去河邊找鬼珊泳。 笑死,一個胖子當著我的面吹牛囤踩,可吹牛的內(nèi)容都是我干的旨椒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼堵漱,長吁一口氣:“原來是場噩夢啊……” “哼综慎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起勤庐,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤示惊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后愉镰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體米罚,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年丈探,在試婚紗的時候發(fā)現(xiàn)自己被綠了录择。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖隘竭,靈堂內(nèi)的尸體忽然破棺而出塘秦,到底是詐尸還是另有隱情,我是刑警寧澤动看,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布尊剔,位于F島的核電站,受9級特大地震影響菱皆,放射性物質(zhì)發(fā)生泄漏须误。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一仇轻、第九天 我趴在偏房一處隱蔽的房頂上張望京痢。 院中可真熱鬧,春花似錦篷店、人聲如沸历造。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吭产。三九已至,卻和暖如春鸭轮,著一層夾襖步出監(jiān)牢的瞬間臣淤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工窃爷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留邑蒋,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓按厘,卻偏偏與公主長得像医吊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子逮京,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

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