变量和常量
变量相当于是内存中的一块存储空间,可以存储一个值而且这个值可以被改变,而常量它的值不能在首次赋值后被再次修改。
定义一个变量的关键字 var
定义一个常量的关键字 let
//声明一个变量
var number1: Int = 1
var number2 = 2
//声明一个常量
let number3: Int = 3
let number4 = 3
数据类型Int 可以不用写,swift会自行推断数据类型。另外在swift里,Int,Double首个字母需要大写。
数值类型和类型转换
在给变量赋值时允许使用运算符计算出数值,但是需要参与运算的各个部分类型保持一致。
let a = 3.5
let b = 7
let c = a + b
上面代码中a和b的数据类型不一致,编译时会出错,应改为:
let a = 3.5
let b = 7
let c = a + Double(b)
布尔类型
布尔类型有两种值,true和false。在swift的循环和分支结构中的条件判断,只能使用布尔类型的值
//创建一个布尔类型的值
var isTrue = false
元组
元组这个概念并不是swift的原创,在其他的语言中,早就有了这个概念。在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)
元组往往是和函数进行配合使用,一个元组可以认为带有多个值,它可以作为函数的返回值或者参数出现。
可空类型
Swift中引入了可空类型(optional)的概念,可空类型在swift里十分重要。可选值有两种状态,有值(true),和没有值(false)可以用在条件判断的语句中
var optValue: Int? = 8
if optValue {
print(optValue)
}
此时optValue有值,判断结果为真,所以执行if{}中的语句
对可选值进行强制解析(确保optValu有值才能强制解析)
var aValue: Int = optValue!
如果optValue没有值却进行强制解析,运行时会出错。
我们可以通过可选绑定来获取可空类型的值
var optValue: Int? = 8
if let new = optValue {
print(new)
}
系统会判断optValue是否有值,如果有值就将值赋值给new,并且条件为真.执行if{}中的语句.如果optValue没有值,则条件为假,不会执行if{}中的语句。
字符串
字符串的定义
var a: String = "sdkfj到家啦"
let b = "djalksd"
字符串中字符的个数
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)
将字符串转为Int型
let str5: String = "255"
let value: Int? = Int(str5)
let newValue: Int = Int(str5)!
print(value) //Optional(255)
print(newValue) //255
循环
for 循环
下面用for循环做一个最简单的1-100求和的程序。
可以在for循环中使用范围运算符
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循环
while的特点先判断再循环 有可能一次都不执行
var sum: Int = 0
var i = 1
while i <= 100 {
sum += i++
}
print(sum)
repeat-while循环
repeat-while循环的特点是先循环,再判断 至少执行一次
提示:repeat-while循环是Swift 2.x中引入的,替代了do-while循环,因为在Swift 2.x中do关键字有了新的意义和用法。
var sum: Int = 0
var j = 1
repeat {
sum += j++
} while j <= 100
print(sum)
举例
1.1-100以内的猜数字游戏
let a = Int(arc4random_uniform(100))+1
print("请猜一个数字")
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点庄家胜。其他点数则游戏继续,第一轮之后,玩家摇出7点庄家胜,摇出玩家第一次摇出的数字则玩家胜
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 //游戏继续
}
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
}
}
}
数组
创建一个数组
var array1 = [String]() //创建一个空数组
var array2: [Int] = [] //创建一个空数组
var array3 = ["apple", "grape", "banana", "apple", "orange"]//创建数组的字面量语法
var array4 = [String](count: 100, repeatedValue: "")
获取数组中元素的个数
print(array3.count)
遍历数组中的元素
for index in 0..<array3.count {
//[]是对数组进行下标运算(取出指定位置的元素)
print(array3[index])
}
//只读循环,(再循环过程中,不能修改数组中的元素)
for str in array3 {
print(str)
}
//能取到下标及相应的值
for (index, value) in array3.enumerate() {
print("\(index).\(value)")
}
向数组中添加元素
array1.append("strawberry")//直接在后面添加元素
array1.insert("waxberry", atIndex: 0)//在指定位置添加元素
array1 += ["abc", "def"]//后面添加元素
let array7 = array1 + array3 //将两个数组合并起来
//更改元素
array3[1...3] = ["www", "eee","yyy"]//更改指定位置的元素
从数组中删除元素
array1.removeAtIndex(2)
array1.removeFirst() //删除第一个
array1.removeFirst(2)//删掉前(2)个
array1.removeLast() //删除全部
数组的复制
let array5 = array3
var array6 = array3[1...3]
举例
30人报数
15个基督教徒,15个非基督教徒围成一圈.报数数到9就死,下一个继续从1开始数.基督教徒都活下来了.问他们的位置
//基督教徒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)