我与Swift的第一次接触
1. 关于Swift
(1)简介
Swift 是一种新的编程语言,用于编写 iOS 和 OS X 应用。Swift 结合了 C 和 Objective-C 的优点并且不受C兼容性的限制。Swift 采用安全的编程模式并添加了很多新特性,这将使编程更简单,更灵活,也更有趣。Swift 是基于成熟而且倍受喜爱得 Cocoa 和 Cocoa Touch 框架,他的降临将重新定义软件开发。
Swift 将现代编程语言的精华和苹果工程师文化的智慧结合了起来。编译器对性能进行了优化,编程语言对开发进行了优化,两者互不干扰,鱼与熊掌兼得。Swift 既可以用于开发“hello, world”这样的小程序,也可以用于开发一套完整的操作系统。所有的这些特性让 Swift 对于开发者和苹果来说都是一项值得的投资。
(2)我对Swift的第一印象
Swift对于以前的我是一项完全陌生的编程语言,但是通过两周时间的接触,我觉得它对于编程新手来说是相当友好的。它是一种工业级品质的系统编程语言,但是却和脚本语言一样,写起代码来轻松愉快。在编写代码过程中,最大的感觉就是少了很多繁琐的内容,譬如,如果输出一句“Hello, word!”,在Swift中只用一个语句就可以输出。
print("Hello,world!")
2. 标示符的命名规则
1. 字母、数字、下划线组成,数字不能开头;
2. 对大小写敏感(即区分大小写);
3. 不能使用关键字做表示符;
4. 驼峰标识:第一个单词全小写,以后每个单词的首字母大写。
小知识点归纳
(1) 输出Double类值的精确度(保留两位小数):
print("周长:%.2f" 2 * M_PI * r)
(2) 字符串插值:
print("a =",terminator: "")
let a = inputDouble()
print("b =",terminator: "")
let b = inputDouble()
print("\(a) + \(b) = \(a + b)")
print("\(a) - \(b) = \(a - b)")
print("\(a) * \(b) = \(a * b)")
print("\(a) / \(b) = \(a / b)")
(3) Swift中加减乘除运算的左右两边类型必须一致。
(4) 元组(tuple):用一个变量或一个常量保存多项数据信息的类型。
let stu: (id: Int,name:String, gender:Bool, age:Int) = (1001, "王大锤", true, 23)
(5)用元组交换两个变量的值:
print(x)
print(y)
(x, y) = (y, x)
print(x,y)
3. 循环体
1.repeat-while循环:至少执行一次
let answer = Int(arc4random_uniform(100)) + 1
var thyAnswer:Int
var counter = 0
repeat {
counter += 1
print("请输入你猜的数字:",terminator:"")
thyAnswer = inputInt()
if thyAnswer > answer {
print("小一点")
}
else if thyAnswer < answer {
print("大一点")
}
else {
print("恭喜你猜对了!你总共猜了\(counter)次")
}
}while thyAnswer != answer
if counter > 7 {
print("你的智商改充值了")
}
说明:这是一个猜数字游戏的循环应用,游戏规则是在1~100之间猜一个数字,直到猜中为止,这里面利用了repeat-while循环。
2.while循环:有可能一次都不执行
func isPrime(n: Int) -> Bool {
var i = 2
while i <= Int(sqrt(Double(n))) {
if n % i == 0 {
return false
}
i += 1
}
//如果上面的循环没有返回false就说明在2到n开根号之间没有n的因子 因此返回true表示n是素数
return true
}
for n in 1...100 {
if isPrime(n) {
print(n)
}
}
注:打印1-100之间所有的素数!
3.for循环
print("num =",terminator:"")
let num = inputInt()
for i in 2..<num {
if num % i == 0 {
print("不是素数")
}
else {
print("是素数")
}
break
}
注:输入一个正整数,判断是不是素数(质数)
4. 数组
(1)创建数组
var array1 = [Int]()
var array2: [Int] = []
var array3 = [99, 12, 34, 456, 7]
var array4 = [Int](count: 100, repeatedValue: 1)
var array5 = [String]()
var array6: [String] = []
var array7 = ["apple", "grape", "banana", "apple", "orange"]
var array8 = [String](count: 100, repeatedValue: "")
(2)获取数组的元素的个数
print(array1.count)
print(array2.count)
print(array3.count)
print(array4.count)
(3)对数组元素进行遍历
for i in 0..<array7.count {
//[]是对数组进行下标运算(取出指定位置的元素)
print(array7[i])
}
(4)数组中添加元素
array5.append("strawberry")
array5.append("pear") //追加 (在后面添加)
array5.insert("waxberry", atIndex: 0) // 插入(在指定位置插入)
array5.insert("watermelon", atIndex: 2)
array5.insert("lemon", atIndex: array5.count)
print(array5)
(5)数组中删除元素
array5.removeAtIndex(2) //删除指定位置的元素
print(array5)
array5.removeFirst() //删除第一个元素
print(array5)
array5.removeAll() //删除全部元素
print(array5)
(6)数组的复制
let array9 = array7 //全部复制
array7[0] = "pitaya"
print(array7)
print(array9)
var array10 = array7[1...3] //复制指定区域的元素
print(array10)
(7)数组的加法
let array11 = array7 + array9
print(array11)
说明:必须是同种类型的才能想加。
5. 数组的排序
(1)Swift中自带的排序
var array = [29, 98, 35, 12, 47, 66, 53, 79]
let newArray = array.sort(>) //降序: >
print(array)
print(newArray)
array.sortInPlace()
print(array)
var str = ["a", "j", "u", "i", "h", "d"]
let newstr = str.sort()
print(newstr)
str.sortInPlace(>)
print(str)
说明:Swift中自带的排序默认为升序,要想打印出降序就将参数设为“>”。Swift中不仅可以对数值类型的进行排序,也可以对非数值类型进行排序。
(2)简单选择排序
var array = [29, 98, 35, 12, 47, 66, 53, 79]
for i in 0..<array.count - 1 {
var minIndex = i
for j in i + 1..<array.count {
if array[j] < array[minIndex]{
minIndex = j
}
}
(array[i], array[minIndex]) = (array[minIndex], array[i])
}
print(array)
说明:简单选择排序———每次从剩下的元素中找最小的元素放到对应的位置。
我的总结:
不管是哪种程序,重要的是要理清楚其中的思路及思想,在简单排序中,先创建一个整数类型的数组,当然,首先定义变量或常量,在这里我们先定义一个变量 minIndex并赋予初值i,是表示我们第一个数为最小值,然后利用循环进行两两比较,如果后边的数array[j]小于前面的array[minIndex],则将array[j]的值赋予array[minIndex],如果后边的数array[j]大于前面的array[minIndex],继续和后面的比较,直到最后为止。
(3)冒泡排序
var array = [29, 98, 35, 12, 47, 66, 53, 79]
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 == false {
break //如果在一次循环中没有发生交换,立即终止。
}
}
print(array)
说明:冒泡排序———两两比较,前面的元素比后面的元素大就交换位置。
我的总结:
在冒泡排序中也是用了for循环的嵌套,外面的for循环是对数组的排序,里面的for循环是对数组内的两两之间进行比较的循环,冒泡排序是两两比较后将大的后移,第一轮找到最大值并放到数组的最后的位置。如果在其中的一轮没有发生交换,添加了判断语句,就要执行该语句立即终止循环,因为那时已经排好序了,不需要在浪费时间!
6. 一些用例的总结
(1)Craps赌博游戏
游戏规则:
第一次摇出7点和11点,玩家胜!
摇出2,3,12点,庄家胜。
其余的点继续
第二次:摇出7点,庄家胜
与第一次摇出的点一致,玩家胜
其余的点继续。
func roll() -> Int {
return Int(arc4random_uniform(6)) + 1
}
var money = 1000
repeat {
print("玩家总资产:¥\(money)元")
var debt:Int
repeat {
print("请下注:", terminator:"")
debt = inputInt()
} while debt <= 0 || debt > money
var needsGoOn = false
let firstPoint = roll() + roll()
print("玩家摇出了\(firstPoint)点")
switch firstPoint {
case 7, 11:
money += debt
print("玩家胜!!!")
case 2, 3, 12:
money -= debt
print("庄家胜!!!")
default:
needsGoOn = true //游戏继续
}
while needsGoOn {
let currentPoint = roll() + roll()
print("玩家摇出了\(currentPoint)点")
if currentPoint == 7 {
money -= debt
print("庄家胜!!!")
needsGoOn = false
}
else if currentPoint == firstPoint {
money += debt
print("玩家胜!!!")
needsGoOn = false
}
}
} while money > 0
print("你破产了!!!")
解释与说明:
变量与常量的定义不再说明,这里产生随机数用了函数的调用,
需要注意的是能用常量就不用变量,变量或常量定义的范围越小越好。
(2)百钱百鸡
要求:
顾名思义,就是用100元钱买一百只鸡,
公鸡5元一只,母鸡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)")
}
}
}
说明:这里应用了穷举法。
穷举法(穷举所有的可能性直到找到正确答案)
(3)输入两个数,输出最大公约数和最小公倍数
print("第一个数:",terminator:"")
let num1 = inputInt()
print("第二个数:",terminator:"")
let num2 = inputInt()
var j = min(num1, num2)
//var j = num1 < num2 ? num1 : num2
while j >= 1 {
if num1 % j == 0 && num2 % j == 0{
print("最大公约数为:\(j)")
print("最小公倍数:\(num1 * num2 / j)")
break
}
j -= 1
}
4.学生成绩统计
var namesArray = ["关羽","张飞","赵云","马超","黄忠"]
var scoresArray = [Double](count: namesArray.count, repeatedValue: 0.0)
for (i,name) in namesArray.enumerate() {
print("请输入\(name)的成绩:", terminator: "")
scoresArray[i] = inputDouble()
}
var sum = scoresArray[0]
var maxIndex = 0
var max = scoresArray[0]
var minIndex = 0
var min = scoresArray[0]
for (index,score) in scoresArray[1..<scoresArray.count].enumerate(){
sum += score
if score > max {
max = score
maxIndex = index + 1
}
else if score < min {
min = score
minIndex = index + 1
}
}
print("平均分:\(sum / Double(scoresArray.count))")
print("\(namesArray[maxIndex])得到了最高分:\(max)")
print("\(namesArray[minIndex])得到了最低分:\(min)")
关于编写好的代码的感想
1.勤加练习,要抓住每一次锻炼的机会!
2.勤加研究,对于代码的每一个细节、思路都要研究透彻!
3.平时多玩些智力题,逻辑推理题,写代码其实很多时候都是在玩逻辑推理,如果怎样,否则怎样,类似于这种选择问题!
4.交流可以碰撞出火花,通过交流你会发现原来有些问题可以这样思考,而不是那样思考!
5.编程无处不在,处处皆编程,要真正喜欢上它,别觉得它是负担和累赘!
** 第一次编写这种文档,看完后打赏一下哦!**
谢谢!!!
网友评论