IOS/Swift入门开发从"白吃"到大神,全球最易懂,最全面,最前沿,最详细,一看就会教程之一!

f2da63e17923fd0a18be1c90b948eb43.jpg

序言

本文为入门教程:主要针对无任何编程基础或是想了解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)")
屏幕快照 2016-08-06 下午4.18.28.png

以上是程序运行结果

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)
还有很多练习例子,比如完美数,水仙花数,约瑟夫环等等,也可以去练习一下。
还记得大一的时候,有位大师级的教授告诉我们,只要学会了重复和判断,就可以完成你想完成的所有事情。简单说最要的部分就是循环和分支。
本次教程到处就要结束了,如果你有什么更好的建议和想法,可以联系我,让我们一同进步。

未完待续····每周日更新新的教程,敬请期待!88····

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容