序言
本文为入门教程:主要针对无任何编程基础或是想了解IOS/Swfit编程开发的小伙伴。
若本文让你感到任何不适,头晕想吐等症状,嘿嘿嘿···本人概不负责!!!
传送门
由于本教程是连载类型,为了各位看客老爷跟加直观的欣赏。
第一课:http://www.jianshu.com/p/8e8ff60121c4
第二课:http://www.jianshu.com/p/8cdabd470f6f
第四课: http://www.jianshu.com/p/55ca9d54a610
概述
学习一门新的语言,首先肯定要先学习它的语法,结构。Swift和C或其他语言的语法有很多差异,在Swift不用声明库函数,不用写main函数,也不用在每句话的结束写分号····
语法
1.如果我们想在屏幕上打印"Hello,Word!"这句话,我可以直接在编译器中写这行代码。
print("Hello,Word!")
不用做更多的操作,就可以得到结果
2.定义变量和常量。
let myConstant = 14 //定义一个常量为myConstant = 14 常量是不可改变的量
var myVariable = 13
myVariable = 14 //定义一个变量为myVariable = 13 然后改变它的值,将14赋给myVariable。现在myVariable的值为14。
3.字符串插值
字符串插值的意思是在你print的过程中,将你定义的常量或变量插入你要输出的字符串中,我们用第一点的print("Hello,Word!")和第二点定义的变量做试验。
print("Hello,\(myConstant)Word!")
print("Hello,Word!\(myVariable)")
以上是程序运行结果
4.注释和其他语言相同,在同一行代码中 不用书写分号。
5.类型推断
在swift中 如果可以的话 尽可能省略类型标记,让swift自己推断类型
6.关于Swift中类型int,float,double相关的
let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
Double(three) 和C语言的强制转换有很大区别
Double(three) swift 中是将three这个数据的值取出来,从新定义一个Double类型的变量,并将Three的值赋这个变量。
7.元组
元组是用一个变量或常量,保存多项数据
let http404Error = (404, "Not Found")
// http404Error is of type (Int, String), and equals (404, "Not Found")
下划线的意思 忽略这一项
let (justTheStatusCode, _) = http404Error
print("The status code is \(justTheStatusCode)")
// Prints "The status code is 404
8.运算符
运算符 可以分为一元运算符,二元运算符,三元运算符。
一元运算符
数字前面代表数字正负的正负号是唯一的一元运算符 eg: -8,-14,+8(正数我们一般省略前面的正号写为:8)
二元运算符
1.赋值运算符
let b = 10
var a = 5
a = b
// a is now equal to 10
2.关系运算符
1 == 1
2 != 1
2 > 1
1 < 2
1 >= 1
2 <= 1
3.算术运算符:加减乘除取余
1 + 2 // equals 3
5 - 3 // equals 2
2 * 3 // equals 6
10.0 / 2.5 // equals 4.0
9 % 2 // equals 1
三元运算符
让c 取a 和b中较小的值
let a =5 , b=10
let c = a < b ? a : b
问号前面是一个产生Bool类型的变量,常量或表达式
9.Parentheses 圆括号的作用
可以使用圆括号改变运算顺序 , 如果不清楚运算的执行程序也可以直接使用圆括号来改变运算顺序。
10.容器类型-数组
数组是一个有序的集合
var threeDoubles = [Double](count: 3, repeatedValue: 0.0)
var array1 = [Int]()
var array2: [Int] = []
var array3 = [99,12,34,156,7]
var array4 = [Int](count: 100, repeatedValue: 1)
var arrayString1 = [String]()
var arrayString2: [String] = []
var arrayString3 = ["abc","def","ghi","apple","orange"]
var arrayString4 = [String](count: 100, repeatedValue: "")
两个数组可以相加
var anotherThreeDoubles = [Double](count: 3, repeatedValue: 2.5)
// anotherThreeDoubles is of type [Double], and equals [2.5, 2.5, 2.5]
var sixDoubles = threeDoubles + anotherThreeDoubles
// sixDoubles is inferred as [Double], and equals [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]
向数组中添加元素的方法
shoppingList.append("Flour")
//可以使用append这个函数
shoppingList += ["Baking Powder"]
// shoppingList now contains 4 items
shoppingList += ["Chocolate Spread", "Cheese", "Butter"]
//也可以用+=向数组中添加一个或多个元素
数组的第一个元素的下标是从0开始的 而不是1
对数组进行遍历(迭代)
let shoppingList = ["Six egg","Milk","Flour","Baking Powder","Bananas"]
for item in shoppingList {
print(item)
}
for (index, value) in shoppingList.enumerate() {
print("Item \(index + 1): \(value)")
}
// Item 1: Six eggs
// Item 2: Milk
// Item 3: Flour
// Item 4: Baking Powder
// Item 5: Bananas”
控制流程
控制流程
1.顺序结构
程序按正常顺序执行。
2.分支结构
3.循环结构
//循环
//第一种循环
import Foundation
var i = 1
while i <= 10 {
print("\(i)")
print("Hello, World!")
i += 1//i++
}
//第二种循环 这种循环和上一种循环主要的区别是 --repeat循环至少执行一次
var i = 1
repeat{
print("\(i).Hello,Word")
i += 1
}while i <= 100
//第三种循环
for i in 1...10{
print("\(i).Hello,World!")
}
// 不想用循环变量 i可以使用 _ 来省略i
这三个结构包括了所有的代码结构
为了帮助我们理解上述的控制流程,我们来做几个练习。废话不多说,直接上干货。
1.猜数字
题目要求:书写一段Swift代码实现,随机出现一个1-100的数字,让用户猜这个数字是几,每次提示用户猜的数字是比实际数字大还是小,直到用户猜中为止。
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("你的智商该充值了!!!")
}
2.得出1-100的素数
//得出1-100的素数
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)
}
}
这段代码并不难,主要的是代码优化,我开始在While是做了n次循环,经过优化后只用做根号n次的循环,大大减少了循环的数量,加快了程序执行的时间。
3.百钱白鸡
题目要求:现在有100块钱,公鸡5块一只,母鸡3块一只,小鸡1块三只,现在要用这100块买100只鸡,问公鸡,母鸡,小鸡各有多少只?
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)")
}
}
}
// GET:穷举法(穷尽所有的可能性直到正确答案)
4.摇色子游戏
题目要求:现有两人,一个玩家,一个庄家。玩家摇两个色子,如果第一次摇到7,11点玩家胜,摇到2,3,12庄家胜,摇到其他点数记住这个点数并继续摇下一次;以后每次玩家摇色子的点数和第一次记住的点数相同玩家胜,摇到7点庄家胜。用swift代码实现以上要求
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 fristPoint = roll() + roll()
print("玩家摇出了\(fristPoint)")
switch fristPoint{
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 == fristPoint{
money += debt
print("玩家胜!!!")
needsGoOn = false
}
}
}while money > 0
print("你破产了!!!!")
5.排序选择
题目要求:一个数组中无序的数字,使用简单选择排序法排序。ps:简单选择排序:每次从剩下元素中找最小的元素放到对应的位置
var array = [27,45,78,58,44,89,12,5]
for i in 0..<array.count - 1{
var mindex = i
for j in i+1..<array.count{
if array[j] < array[mindex]{
mindex = j
}
}
(array[i],array[mindex]) = (array[mindex],array[i])
}
print(array)
6.冒泡排序
题目要求:一个数组中无序的数字,使用冒泡排序法排序。ps:冒泡排序:两个数字排序将大的数字排在后面。
var array = [27,45,78,58,44,89,12,5]
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 // if !swapped
{
break
}
}
print(array)