Swift学习笔记01

变量和常量

变量相当于是内存中的一块存储空间,可以存储一个值而且这个值可以被改变,而常量它的值不能在首次赋值后被再次修改。
定义一个变量的关键字 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..

向数组中添加元素

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[j + 1]{
        (array[j], array[j + 1]) = (array[j + 1], array[j])
        swapped = true
       }
    }
    if !swapped {
        break
    }
}
print(array)

你可能感兴趣的:(Swift学习笔记01)