Swift學習筆記01

變量和常量

變量相當于是內(nèi)存中的一塊存儲空間垒迂,可以存儲一個值而且這個值可以被改變,而常量它的值不能在首次賦值后被再次修改芜抒。
定義一個變量的關鍵字 var
定義一個常量的關鍵字 let

//聲明一個變量
var number1: Int = 1
var number2 = 2
//聲明一個常量
let number3: Int = 3
let number4 = 3

數(shù)據(jù)類型Int 可以不用寫,swift會自行推斷數(shù)據(jù)類型泼疑。另外在swift里,Int,Double首個字母需要大寫。

數(shù)值類型和類型轉(zhuǎn)換

在給變量賦值時允許使用運算符計算出數(shù)值讶隐,但是需要參與運算的各個部分類型保持一致抖拦。

let a = 3.5
let b = 7
let c =  a + b 

上面代碼中a和b的數(shù)據(jù)類型不一致,編譯時會出錯,應改為:

let a = 3.5
let b = 7
let c = a + Double(b)

布爾類型

布爾類型有兩種值,true和false。在swift的循環(huán)和分支結構中的條件判斷,只能使用布爾類型的值

//創(chuàng)建一個布爾類型的值
var isTrue = false

元組

元組這個概念并不是swift的原創(chuàng),在其他的語言中,早就有了這個概念诫睬。在oc中,并沒有元組的概念煞茫。元組就是將各種類型的值組合在一起的一個復合值

//定義一個元組
var teacher: (String, Int, Double)
teacher = ("小明", 30, 175.5)
print(teacher)
let student = ("張三", 20, 180.0)
print(student.0)//可以通過下標打印元組中的某個元素
//此外還可以給元組的各元素取名
let student1 = (name: "張三", age: 20, height: 180.0)
print(student1.name)
print(student1.age)

元組往往是和函數(shù)進行配合使用,一個元組可以認為帶有多個值,它可以作為函數(shù)的返回值或者參數(shù)出現(xiàn)。

可空類型

Swift中引入了可空類型(optional)的概念,可空類型在swift里十分重要摄凡⌒眨可選值有兩種狀態(tài),有值(true),和沒有值(false)可以用在條件判斷的語句中

var optValue: Int? = 8
if optValue { 
   print(optValue)
}

此時optValue有值,判斷結果為真,所以執(zhí)行if{}中的語句

對可選值進行強制解析(確保optValu有值才能強制解析)

var aValue: Int = optValue!

如果optValue沒有值卻進行強制解析,運行時會出錯。
我們可以通過可選綁定來獲取可空類型的值

 var optValue: Int? = 8
 if let new = optValue {
  print(new)
 }

系統(tǒng)會判斷optValue是否有值,如果有值就將值賦值給new,并且條件為真.執(zhí)行if{}中的語句.如果optValue沒有值,則條件為假,不會執(zhí)行if{}中的語句亲澡。

字符串

字符串的定義

var a: String = "sdkfj到家啦"
let b = "djalksd"

字符串中字符的個數(shù)

var b = "abcd哈哈"
print(b.characters.count)

字符串的構造
Swift中的字符串插值,字符串拼接十分的方便

let str1 = "hello,"
let str2 = "world!"
let str3 = str1 + str2 
print(str3) //結果為 hello,world!
var a = 98
var b = "張三"
let c = "\(b)期末考試獲得了\(a)分"
print(c) // 張三期末考試獲得了98分

字符串的比較
判斷是否有前后指定的前后綴

let str4 = "Apple"
if str4.hasPrefix("le") {
    print("hasprefix")
}
if str4.hasSuffix("le") {
    print("hasSuffix")
}

字符串變大寫,字符串變小寫

print(str4.uppercaseString)
print(str4.lowercaseString)

將字符串轉(zhuǎn)為Int型

let str5: String = "255"
let value: Int? = Int(str5)
let newValue: Int = Int(str5)!
print(value)  //Optional(255)
print(newValue) //255

循環(huán)

for 循環(huán)

下面用for循環(huán)做一個最簡單的1-100求和的程序钦扭。
可以在for循環(huán)中使用范圍運算符

var sum: Int = 0
for i in 1...100 {
  sum += i
}
print(sum)

1...100 i的范圍是 1,2......100。
1..<100 i的范圍是 1,2......99床绪。

while循環(huán)

while的特點先判斷再循環(huán) 有可能一次都不執(zhí)行

var sum: Int = 0
var i = 1
while i <= 100 {
  sum += i++
}
print(sum)

repeat-while循環(huán)

repeat-while循環(huán)的特點是先循環(huán),再判斷 至少執(zhí)行一次
提示:repeat-while循環(huán)是Swift 2.x中引入的客情,替代了do-while循環(huán),因為在Swift 2.x中do關鍵字有了新的意義和用法癞己。

var sum: Int = 0
var j = 1
repeat {
  sum += j++
} while j <= 100
print(sum)

舉例

1.1-100以內(nèi)的猜數(shù)字游戲

let a = Int(arc4random_uniform(100))+1
print("請猜一個數(shù)字")
var m = inputInt()
var i = 1
while a != m {
if a < m {
    print("再小一點")
}
else {
    print("再大一點")
}
      m = inputInt()
    i += 1
}
print("恭喜你猜對了,你一共猜了\(i)次")

2.百元買雞(一只公雞5元,一只母雞3元,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)")
        }
    }
}

3.骰子游戲
第一次搖出7點11點玩家勝 ,2點3點12點莊家勝膀斋。其他點數(shù)則游戲繼續(xù),第一輪之后,玩家搖出7點莊家勝,搖出玩家第一次搖出的數(shù)字則玩家勝

var money = 1000
while money > 0 {

var needsGoOn = false
func roll() -> Int {
    return Int(arc4random_uniform(6)) + 1
}
let firstPoint = roll() + roll()
print(firstPoint)
switch firstPoint {
case 7, 11:
    print("玩家勝")
    money += 100
    print(money)
case 2, 3, 12:
    print("莊家勝")
    money -= 100
    print(money)
default:
   needsGoOn = true     //游戲繼續(xù)
}
while needsGoOn  {
    let number = roll() + roll()
    print(number)
    if number == 7 {
        print("莊家勝")
        money -= 100
        print(money)
        needsGoOn = false
    }
    else if number == firstPoint {
        print("玩家勝")
        money += 100
        print(money)
        needsGoOn = false
    }
}
}

數(shù)組

創(chuàng)建一個數(shù)組

var array1 = [String]()     //創(chuàng)建一個空數(shù)組
var array2: [Int] = []   //創(chuàng)建一個空數(shù)組
var array3 = ["apple", "grape", "banana", "apple", "orange"]//創(chuàng)建數(shù)組的字面量語法
var array4 = [String](count: 100, repeatedValue: "")

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

print(array3.count)

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

for index in 0..<array3.count {
    //[]是對數(shù)組進行下標運算(取出指定位置的元素)
    print(array3[index])
}
//只讀循環(huán),(再循環(huán)過程中,不能修改數(shù)組中的元素)
for str in array3 {
    print(str)
}
//能取到下標及相應的值
for (index, value) in array3.enumerate() {
    print("\(index).\(value)")
}

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

array1.append("strawberry")//直接在后面添加元素
array1.insert("waxberry", atIndex: 0)//在指定位置添加元素
array1 += ["abc", "def"]//后面添加元素
let array7 = array1 + array3 //將兩個數(shù)組合并起來
//更改元素
array3[1...3] = ["www", "eee","yyy"]//更改指定位置的元素

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

array1.removeAtIndex(2)
array1.removeFirst() //刪除第一個
array1.removeFirst(2)//刪掉前(2)個
array1.removeLast() //刪除全部

數(shù)組的復制

let array5 = array3
var array6 = array3[1...3]

舉例
30人報數(shù)
15個基督教徒,15個非基督教徒圍成一圈.報數(shù)數(shù)到9就死,下一個繼續(xù)從1開始數(shù).基督教徒都活下來了.問他們的位置

//基督教徒1,非基督教徒0
var die = 0
var times = 0
var index = 0
var peopleArray = [Int](count: 30, repeatedValue: 1)
while times < 15 {
    
    if peopleArray[index] == 1 {
           die += 1
    
    if die == 9 {
        peopleArray[index] = 0
        die = 0
        times += 1
        }
    }
    index += 1
    if index == peopleArray.count {
        index = 0
    }
}

冒泡排序

var array = [37,54, 34, 23, 56, 43, 35, 78]
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)
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市痹雅,隨后出現(xiàn)的幾起案子仰担,更是在濱河造成了極大的恐慌,老刑警劉巖练慕,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惰匙,死亡現(xiàn)場離奇詭異,居然都是意外死亡铃将,警方通過查閱死者的電腦和手機项鬼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來劲阎,“玉大人绘盟,你說我怎么就攤上這事∶跸桑” “怎么了龄毡?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锡垄。 經(jīng)常有香客問我沦零,道長,這世上最難降的妖魔是什么货岭? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任路操,我火速辦了婚禮疾渴,結果婚禮上,老公的妹妹穿的比我還像新娘屯仗。我一直安慰自己搞坝,他們只是感情好,可當我...
    茶點故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布魁袜。 她就那樣靜靜地躺著桩撮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪峰弹。 梳的紋絲不亂的頭發(fā)上店量,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天,我揣著相機與錄音垮卓,去河邊找鬼垫桂。 笑死,一個胖子當著我的面吹牛粟按,可吹牛的內(nèi)容都是我干的诬滩。 我是一名探鬼主播,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼灭将,長吁一口氣:“原來是場噩夢啊……” “哼疼鸟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起庙曙,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤空镜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捌朴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吴攒,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年砂蔽,在試婚紗的時候發(fā)現(xiàn)自己被綠了洼怔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡左驾,死狀恐怖镣隶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情诡右,我是刑警寧澤安岂,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布,位于F島的核電站帆吻,受9級特大地震影響域那,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜猜煮,卻給世界環(huán)境...
    茶點故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一琉雳、第九天 我趴在偏房一處隱蔽的房頂上張望样眠。 院中可真熱鬧,春花似錦翠肘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至盟戏,卻和暖如春绪妹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背柿究。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工邮旷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蝇摸。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓婶肩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親貌夕。 傳聞我的和親對象是個殘疾皇子律歼,可洞房花燭夜當晚...
    茶點故事閱讀 43,576評論 2 349

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

  • 53.計算字符 在字符串中獲取字符值的數(shù)量, 可以使用字符串字符屬性中的計數(shù)屬性: let unusualMena...
    無灃閱讀 1,081評論 0 4
  • 關于 Swift 重要這個文檔所包含的準備信息, 是關于開發(fā)的 API 和技術的。這個信息可能會改變, 根據(jù)這個文...
    無灃閱讀 4,285評論 1 27
  • swift的基礎語法 這樣吧啡专,先把swift4.0教材的先分享給大家险毁。swift4和swift3的基本上沒有多大的...
    請輸入賬號名閱讀 15,698評論 12 60
  • 總是暖冬。 近兩個月前在牡丹廣場们童,見粗矮的月季莖上已迸出了很有勁的紅芽畔况,全無冬滋味。這兩天和父親在洛浦慧库,梅花早已恣...
    八里山人程遠河閱讀 260評論 4 6
  • 如果說跷跪,在我的人生軌跡里反差最大的是誰,那一定是我的媽媽完沪。 聽說我很小的時候域庇,我媽一抱我我就哭,哭聲里咿咿呀呀喊的...
    渡人曦閱讀 413評論 2 1