美文网首页iOS Developer - SwiftiOS Developer
IOS/Swift入门开发从"白吃"到大神,

IOS/Swift入门开发从"白吃"到大神,

作者: 芒果微笑 | 来源:发表于2016-08-07 21:15 被阅读1234次
    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····

    相关文章

      网友评论

      • NateLam:请教楼主, OC里面的比较两数大小MAX(A, B), 在swift里面咋写...:anguished:
      • 无名小卒赫:支持! 坚持住 别太监啊
      • 芒果微笑:O(∩_∩)O哈哈哈~ 做完了

      本文标题:IOS/Swift入门开发从"白吃"到大神,

      本文链接:https://www.haomeiwen.com/subject/mrblsttx.html