變量和常量
變量相當于是內(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)