Swift语言是苹果于2014年WWDC发布的新开发语言,可与Objective-C共同运行于和iOS平台,用于搭建基于苹果平台的应用程序。Swift 结合了 C 和 Objective-C 的优点并且不受C兼容性的限制。Swift 采用安全的编程模式并添加了很多新特性,这将使编程更简单,更灵活,也更有趣。
数据类型
数据类型有整型、浮点型、字符串类型、布尔类型等,整型和浮点型又分为几类。我们平时在使用的时候,输入整数类型一般选择Int;输入小数类型一般选择Double;输入字符串一般选择String;布尔类型只有两种取值true或false。
let a = 4
let b = 3.1416
let c = "apple"
let needsGoNo = true
相同类型的数值是可以参与运算的,数据类型不同时需要转换,String类型可以做加法运算
let a = 2
let b = 1.25
let c = "Hello"
let c2 = "world"
let d = a + Int(a)
let e = c + d
布尔类型经常在循环和分支结构使用
元组
tuple(元组) - 用一个变量或者常量保存多项数据信息的类型
let stu = (1001,"王大锤",true,23) //定义一个四元组
//打印元组第一项内容
print(stu.0)
//取元组stu的第二项和第四项内容
let (_,j,_,k) = stu
print(j)
print(k)
分支结构和循环结构
分支结构
本周讲了Swift中的分支结构:if-else和switch-case-default
- ** if-else语句**
下面是一段用if-else语句实现分段函数求值的代码
var x = 1.5
var y: Double
if x < -1 {
y = 3 x + 5
}
else if x <= 1 {
y = x
}
else {
y = 5 * x - 3
}
print(y)
-
switch-case-default语句
下面是一段用switch-case-default语句实现区分骰子大小的代码
let a = Int(arc4random_uniform(6)) + 1
switch a{
case 1,2,3:
print("你摇出了小")
case 4,5,6:
print("你摇出了大")
}
循环结构
循环结构本周讲了for循环,while循环,repeat-while循环
-
for循环
斐波拉切数列
var a = 1
var b = 1
print(a,terminator:"\t")
print(b,terminator:"\t")
for _ in 0...20{
print("\(a+b)",terminator:"\t")
(a,b) = (b,a+b)
}
for循环的嵌套使用 - 打印九九乘法表
for i in 1...9{
for j in 1...i{
print("\(i)*\(j)=\(i * j) ",terminator:"\t")
}
print("")
}
- while循环
var sum = 0
var i = 1
while i <= 100 {
sum += i++
}
print(sum)
- repeat-while
var sum = 0
var j = 1
repeat {
sum += j++
} while j <= 100
print(sum)
在很多时候分支结构和循环结构是要一起使用的
求1—10000的完美数
for i in 2...10000{
var sum = 1
var j = 2
while j <= Int(sqrt(Double(i))){
if i % j == 0{
sum += j
if i / j != j{
sum += i / j
}
}
j += 1
}
if sum == i {
print(i)
}
}
Craps赌博游戏:投2颗色子 ,首轮 7 ,11为玩家胜利 , 2,3,12为庄家胜利,其余点数继续;之后玩家投到7就输 ,投到和首轮一样的点数玩家就赢
func roll () -> Int{
return Int(arc4random_uniform(6)) + 1
}
var money = 1000
repeat{
print("玩家总资产:\(money)")
var debet:Int
repeat{
print("请下注:",terminator:"")
debet = inputInt()
} while debet <= 0 || debet > money
var needsGoOn = false
let firstPoint = roll() + roll()
print("玩家第一次摇出了\(firstPoint)点")
switch firstPoint{
case 7, 11:
print("玩家胜")
money += debet
case 2, 3, 12:
print("庄家胜")
money -= debet
default:
needsGoOn = true
}
while needsGoOn{
let currantPoint = roll() + roll()
print("玩家摇出了\(currantPoint)点")
if currantPoint == 7 {
print("庄家胜")
money -= debet
needsGoOn = false
}
else if currantPoint == firstPoint{
print("玩家胜")
money += debet
needsGoOn = false
}
}
}while money > 0
print ("你破产了")
穷举法
穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。
百钱百鸡 :100块买100只鸡,公鸡5块每只,母鸡3每只,小鸡1元每3只
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)")
}
}
}
数组
1.数组的创建
var array1 = [Int]()
var array2: [Int] = []
var array3 = [12,121,54,45,7]
var array4 = [Int](count: 100, repeatedValue: 1)
var arrayadd = array1 + array2
var array5 = [String]()
var array6 = ["sa","sa"]
var array7 = [String](count: 10, repeatedValue: "")
2.获取数组元素个数
print(array.count)
3.对数组中的元素进行遍历
//方法1 循环过程中可以改变数组元素
for index in 0..<array3.count{
if index == 1{
array3[index] = 123
}
print(array3[index])
}
//方法2 只读循环,在循环过程中不能改变数组元素
for str in array6{
print(str)
}
//方法3
for (_index,value) in array6.enumerate(){
print("\(_index).\(value)")
}
4.向数组中添加元素
//append 从后边加入,当前下标为0
array5.append("strawberry")
array5.append("pear") //当前下标为1
//insert插入数据 当前下标为0,之前元素下标一次递增1
array5.insert("waxberry", atIndex: 0)
//在梨和草莓中间加上西瓜
array5.insert("watermelon", atIndex: 2)
//将柠檬加到数组最后
array5.insert("lemon", atIndex: array5.count)
5.从数组中删除元素
array5.removeAtIndex(0)//删除指定位置
array5.removeFirst(0)//删除前面n个
6.复制数组
var array_5 = array5
var array_5_5 = array5[1..<3]//只复制下标1-3的部分
-
“约瑟夫环”问题
约瑟夫环”问题:15基督教徒15非基督教徒围一圈,报数到9就杀掉,杀到15个停止,刚好15个非基督教徒被杀死,问开始位置怎么站的
var personsArray = [Bool](count: 30, repeatedValue: true)
var counter = 0 //
var num = 0
var index = 0
while counter < 15 {
if personsArray[index]{
num += 1
if num == 9{
personsArray[index] = false
counter += 1
num = 0
}
}
index += 1
index %= personsArray.count
}
for person in personsArray{
print( person ? "基" : "非",terminator:"")
}
冒泡排序和简单选择排序
冒泡排序:两两比较,前面的元素比后面的元素大就交换位置
for i in 0..<array1.count - 1{
var isChange = false
for j in 0..<array1.count - 1 - i{
if array1[j] > array1[j + 1]{
(array1[j],array1[j + 1]) = (array1[j + 1],array1[j])
isChange = true //isChange=true说明发生交换
}
}
if !isChange{
break
}
}
简单选择排序:每次从剩下的元素中找最小的元素放到对应位置
var array1 = [255,548,42,456,878,2454,8,54,549]
for minIndex in 0..<array1.count - 1{
for index in minIndex + 1..<array1.count{
if array1[index] < array1[minIndex]{
(array1[index],array1[minIndex]) = (array1[minIndex],array1[index])
}
}
}
标识符的命名规则
1.字母(Unicode字符)、数字、下划线,数字不能开头
2.大小写敏感
3.不能使用关键字做标识符
4.驼峰标识(驼峰命名法)- 第一个单词全小写以后每个单词首字母大写
5.见名知意 以上这些就是本周所讲内容。