Swift初學(xué)體驗(yàn)

學(xué)習(xí)總結(jié)

    學(xué)習(xí)了兩周的Swift采章,第一周算是對(duì)Swift有了一個(gè)初步的認(rèn)識(shí),體會(huì)了Swift語言開發(fā)的過程以及可視化開發(fā)的便利壶辜,算是一個(gè)愉快的開始悯舟,第二周就是鋪天蓋地的循環(huán),數(shù)組這些必須要掌握的語法士复,尤其是周三周四這兩天的連綿不絕的練習(xí)图谷,讓我覺得在這里學(xué)習(xí)努力是不夠的,要爆肝才行摆搴椤便贵!不過,連著學(xué)了一周的語法冗荸,還是學(xué)到了一點(diǎn)東西的承璃。

初識(shí)Swift

    作為一門發(fā)布了兩年就能排在15名之前的語言,雖然有蘋果火熱的原因蚌本,但Swift必然也有它獨(dú)特的魅力盔粹。作為一個(gè)初學(xué)者隘梨,我體會(huì)不到它怎樣能成為20年內(nèi)編程語言的霸主,不過既然這么多人追捧舷嗡,就姑且認(rèn)為它確實(shí)很牛逼轴猎。
    不過一句簡單的打印"Hello,world!"的程序,卻是還是感覺不錯(cuò)的进萄,至少比起其他語言的一大串要好的多捻脖。Swift支持代碼預(yù)覽,這個(gè)革命性的特性可以允許程序員在不編譯和運(yùn)行應(yīng)用程序的前提下運(yùn)行 Swift 代碼并實(shí)時(shí)查看結(jié)果中鼠,這對(duì)我們這些初學(xué)者來說是很友好的東西可婶。在定義一個(gè)變量或常量的時(shí)候設(shè)置可以不需要考慮類型的問題,Swift強(qiáng)大的類型推斷能力就能搞定這一切援雇。

變量和常量

使用let來聲明一個(gè)常量矛渴,使用var來聲明一個(gè)變量

例如:

var a = 1
let b = 2
var a = b

變量和常量的值永遠(yuǎn)不會(huì)被隱式轉(zhuǎn)換為其它類型,如果需要把一個(gè)值轉(zhuǎn)換成其他類型惫搏,需要顯示轉(zhuǎn)換具温。

let label = "The width is"
let width = 94
let widthlabel = label + String(width)

還有一種把值轉(zhuǎn)換為字符串的方法叫做 “字符串插值”

let day = 6
let today = "今天是星期\(day)"

元組(Tuples)

用一個(gè)變量或者一個(gè)常量保存多項(xiàng)數(shù)據(jù)信息的類型

let stu:(id:Int,name:String,gender:Bool,age:Int) = (1001,"王鋼炮",true,21)
let (_,姓名,_,年齡) = stu
//元組取值從0開始,下劃線表示忽略晶府,取值時(shí)就可以跳過

用元組快捷交換兩個(gè)變量的值

(x,y) = (y,x)

標(biāo)識(shí)符的命名規(guī)則

  1. 字母(Unicode字符)桂躏、數(shù)字、下劃線川陆,數(shù)字不能開頭
  2. 大小寫敏感
  3. 不能使用關(guān)鍵字做標(biāo)識(shí)符
  4. 駝峰標(biāo)識(shí) - 第一個(gè)單詞全小寫以后每個(gè)單詞首字母大寫
  5. 見名知意

運(yùn)算符

1.算術(shù)運(yùn)算符(Arithmetic Operators)

算術(shù)運(yùn)算符主要有 + , - , * , / , % 五個(gè)剂习,還有自增(++)和自減(--)兩個(gè)在Swift3中即將刪掉的運(yùn)算符
算術(shù)運(yùn)算符的要求就是左右兩邊的類型必須一樣,不然無法運(yùn)算,有趣的是较沪,swift里還可以進(jìn)行字符串的 + 運(yùn)算鳞绕。
關(guān)于整數(shù)的除運(yùn)算,也有一點(diǎn)要注意尸曼;整數(shù)除以整數(shù)的商就是結(jié)果的整數(shù)部分们何,所以321除以100結(jié)果就是3,355除以100結(jié)果也等于3而不是4控轿,沒有四舍五入冤竹!

2.比較運(yùn)算符(comparison Operators)

比較運(yùn)算符又叫關(guān)系運(yùn)算符,有 > , < , == , != , >= , <=六種茬射,產(chǎn)生Bool類型的值鹦蠕,要么是true,要么是false在抛!

let name = "world"
if name == "world" {
    print("hello, world")
} else {
    print("I'm sorry \(name), but I don't recognize you"
}

3.三元條件運(yùn)算符(Ternary conditional Operator)

三元運(yùn)算符的格式大概就是(question ? answer1 : answer2) 前面的question如果成立钟病,就執(zhí)行answer1,如果不成立,就執(zhí)行answer2
有了三元運(yùn)算符肠阱,就可以替代很多的if語句票唆,可以讓代碼更簡潔。

4.短路運(yùn)算符(Logical Operator)

邏輯與(Logical And) &&
邏輯或(Loical Or) ||
邏輯非(Logical Not) !

let year = 1344
if ( year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0  {
    print("\(year)年是閏年")
}
else {
    print("\(year)年不是閏年")
}

分支結(jié)構(gòu)

使用if和switch來進(jìn)行條件操作屹徘,主要有
if{

}
else{

}
以及
switch{
case:
case:
default:
}
這兩種結(jié)構(gòu)都可以套用if-else里面可以套用switch-case走趋,switch-case里也可以套用if-else的結(jié)構(gòu),當(dāng)然if-else也能套用if-else噪伊。
比如:

// IT從業(yè)人員等級(jí)評(píng)定
print("請(qǐng)輸入你的月薪: ", terminator: "")
let salary = inputInt()
if salary >= 0 {
    switch salary {
    case 0:
        print("你是一個(gè)無業(yè)游民")
    case 1...30000:
        print("你是一個(gè)小碼畜")
    case 30001...60000:
        print("你是一個(gè)小碼奴")
    case 60001...100000:
        print("你是一個(gè)大碼農(nóng)")
    case 100001...200000:
        print("你是一個(gè)光榮的IT民工")
    case 200001...500000:
        print("你是一個(gè)優(yōu)秀的IT工程師")
    case 500001..<10000000:
        print("你是IT精英")
    case 10000000..<100000000:
        print("你是IT大哥, 我服")
    default:
        print("你是頭上有光環(huán)的IT領(lǐng)袖, 求帶")
    }
}
else {
    print("你丫有病!!!")
}

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

    使用for_in吆视、for、while酥宴、和repeat - while來進(jìn)行循環(huán)。包裹條件和循環(huán)變量括號(hào)可以省略您觉,語句的大括號(hào)還是必須的拙寡。
    repeat-while
 //repeat-while循環(huán) - 至少執(zhí)行一次
var i = 1
repeat {
    print("\(i). Hello, world!")
    i += 1
} while i <= 100

    while
 //while循環(huán) - 有可能一次都不執(zhí)行
var i = 1
while i <= 10 {
    print("\(i). Hello, world!")
    i += 1
}

    for - in
// for循環(huán)
for _ in 1..<10 {
   print("Hello, world!")
}

    在練習(xí)這一段的時(shí)候,差不多兩天的時(shí)間不停的練習(xí)琳水,確實(shí)讓人爽了一把肆糕。智商余額不足的我每次看到其他人寫出來而自己連思路都沒有確實(shí)很揪心。但是在痛苦的過程中在孝,確實(shí)還是學(xué)到了一些東西诚啃。
let answer = Int(arc4random_uniform(1000)) + 1
var thyAnswer: Int
var counter = 0
repeat{
    counter += 1
print("請(qǐng)輸入你的答案:", terminator: "")
    thyAnswer = inputInt()
if thyAnswer > answer{
    print("大了")
}else if thyAnswer < answer{
    print("小了")
}else{
    print("你猜中了,你猜了\(counter)")
}
}while thyAnswer != answer
    if counter > 7{
        print("你的智商需要充值!")
    }

一個(gè)簡單的猜數(shù)字的游戲用到了repeat-while,怎么用私沮,放在哪里都可以讓我琢磨許久始赎。

// 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("玩家勝!!!")
    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)了!!!")
    這個(gè)賭博游戲更是把這幾天所學(xué)的知識(shí)全都用上了,代碼的規(guī)范仔燕,函數(shù)的使用造垛,循環(huán),分支的結(jié)構(gòu)全都涉及到了晰搀。
    除此之外五辽,還get到了一個(gè)很重要的東西——窮舉法:窮盡所有的可能性直到找到正確答案),這就是按照人的思維去算外恕,但是人的運(yùn)算速度有限杆逗,計(jì)算某些事情需要耗費(fèi)太多時(shí)間而且容易出錯(cuò)。這里鳞疲,用計(jì)算機(jī)使用窮舉法就可以完美解決這個(gè)問題罪郊。計(jì)算機(jī)強(qiáng)就強(qiáng)在運(yùn)算快,不易出錯(cuò)建丧。
100錢買100雞的問題
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)")
        }
    }
}

數(shù)組

數(shù)組主要是排序問題
swift 強(qiáng)大的功能使得這一問題變得非常簡單排龄,sort函數(shù)輕松解決

let newArray = array.sort(>)//排序后產(chǎn)生一個(gè)新數(shù)組
print(array)
print(newArray)
array.sortInPlace()//就在這個(gè)數(shù)組排序
print(array)

但是只會(huì)使用函數(shù)永遠(yuǎn)也不能進(jìn)步,所以我們需要更復(fù)雜的方法來提升自己
除了用sort函數(shù),我們還有兩種方法可以排序

簡單選擇排序法

簡單排序是定義(假設(shè)橄维?)數(shù)組的第一個(gè)數(shù)為最小的數(shù)尺铣,依次與數(shù)組里的數(shù)進(jìn)行比較,小的放前面争舞,循環(huán)次數(shù)為數(shù)組里元素的個(gè)數(shù)

//簡單選擇排序

var array = ["faker","amazingj","condi","clearlove","martin","looper","swift","easyhoon",]
for i in 0..<array.count - 1{
var minIndex = i
for i in i+1..<array.count{
    if array[i] < array[minIndex]{
          minIndex = i
        
    }
}
(array[i],array[minIndex]) = (array[minIndex],array[i])
}
print(array)


冒泡排序法

冒泡排序:兩兩比較凛忿,前面的元素比后面的元素大就交換位置,再加上優(yōu)化竞川,排序完成就可以停止循環(huán)店溢。適合只有少數(shù)順序不對(duì)的數(shù)組。



var array = [56,37,68,23,99,27,6,77]
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)

經(jīng)過一周的學(xué)習(xí)委乌,我清楚的認(rèn)識(shí)到我與其他同學(xué)尤其是與10k的差距床牧,確實(shí)讓人有點(diǎn)沮喪。不過沒辦法遭贸,既來之則安之戈咳,既然奔著學(xué)(shi)習(xí)(k)編(gao)程(xin)來的,就一定要搞定它壕吹!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末著蛙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子耳贬,更是在濱河造成了極大的恐慌踏堡,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咒劲,死亡現(xiàn)場離奇詭異顷蟆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)缎患,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門慕的,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挤渔,你說我怎么就攤上這事肮街。” “怎么了判导?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵嫉父,是天一觀的道長。 經(jīng)常有香客問我眼刃,道長绕辖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任擂红,我火速辦了婚禮仪际,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己树碱,他們只是感情好肯适,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著成榜,像睡著了一般框舔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赎婚,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天刘绣,我揣著相機(jī)與錄音,去河邊找鬼挣输。 笑死纬凤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的撩嚼。 我是一名探鬼主播移斩,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼绢馍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起肠套,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤舰涌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后你稚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓷耙,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年刁赖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搁痛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宇弛,死狀恐怖鸡典,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情枪芒,我是刑警寧澤彻况,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站舅踪,受9級(jí)特大地震影響纽甘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抽碌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一悍赢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦左权、人聲如沸皮胡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胸囱。三九已至,卻和暖如春瀑梗,著一層夾襖步出監(jiān)牢的瞬間烹笔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國打工抛丽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谤职,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓亿鲜,卻偏偏與公主長得像允蜈,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蒿柳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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