Swift第一周学习总结

作者: 落叶追风 | 来源:发表于2016-08-06 14:26 被阅读83次

    [TOC]


    Swift.jpg

    初识Swift

    print("Hello, swift")
    

    第一次给我的四大印象

    1. Swift是一种面向对象的计算机编绘语言
    2. Swift不需要引入头文件或写在main()内,也不需要在每一句加上分号(当然,若你保有使用某些其他语言的习惯,如Java、C等加上分号结尾亦不会报错)
    3. Swift有着强大的类型推断功能
    4. Swift简单的三个字符的关键字定义一个变量(var)或常量(let)

    SWIFT_百度百科

    标识符的命名规则

    -1. 字母(Unicode)字符,数字,下划线,数字不能开头
    -2. 大小写敏感
    -3. 不能使用关键字做标识符
    -4. 驼峰命名法 - 第一个单词全小写以后每个单词首字母大写-
    -5. 见名知意

    程序设计(Program design)

    • 程序是一系列指令的集合
    • 程序设计是给出解决特定问题程序的过程,是软件构造活动中的重要组成部分

    变量和常量(Constants and Variables)

    简单的使用规范

    • 使用let来声明常量,使用var来声明变量

    let myConstant = 2016
    var myVariable = 2016

    - 常量的值只能赋值一次,但能使用多次
    ```swift
    myVariable = 20160806
    
    • Swift是一个静态类型语言,在程序运行中不能改变变量的类型(Java也是)
    • 类型推断,在Swift中如果可以的话尽可能省略类型标记,让编译器自动推断变量或常量的类型
    constant.png variable.png
    • 如果初始值没有提供足够的信息(或者没有初始值),那你需要在变量后面声明类型
    var year: String
    
    • 值永远不会被隐式转换为其它类型,若要将值转换成字符串可以利用字符串差值的方法
    // 显示转换
    year = "今年是" + String(myVariable) + "年"
    // 字符串插值
    year = "今年是\(myConstant)年"
    

    运算符(Terminology)

    运算符类型 表达式 简单的举例
    一元运算符(Unary) -, !... -a, !false
    二元运算符(Binay) + ,- ,* ,/ ,% ... 2 + 3
    三元运算符(Ternary) a ? b : c ... 1 == 2 ? true : false

    复合赋值运算(Compound Assignment Operators)

    var a = 1
    a += 2   // 等同于 a = a + 2
    // 类似的还有:-=, *=, /=
    

    求模运算(Remainder Operator)

    RemainderOperator.png
    a = 9 % 4 // a = 1
    

    分支结构(Branching construct)

    • if. . .else. . . 类型

    if question {
        answer1 // 条件满足question,则执行answer1
    } else {
        answer2 // 反之,则执行answer2
    }
    // 等同于 question ? answer1 : answer2
    
    • switch. . .case. . . 类型

    let question = 1
    switch question {
    case 1:
        answer1
    default:
        answer2
    }
    

    循环结构(Cycle structure)

    1. while. . .循环

    ++*有可能一次都不执行++

    while i <= 10 {
        print(“Hello, world")
        i += 1
    }
    

    2. repeat. . .while. . .循环

    ++*至少执行一次++

    repeat {
        print(“Hello, world")
        i += 1
    } while i <= 10
    

    3. for. . .循环

    ++*依次执行++

    for i in 1...10 {
        print(“Hello, world")
    }
    

    数组(Array)

    数组将相同类型的值储存在一个有序的列表中,相同的值可以多次出现在一个数组的不同位置。

    1. 创建数组

    var array1 = [Int]()
    var array2: [Int] = []
    var array3 = [99, 12, 34, 7]
    var array4 = [Int](count: 100, repeatedValue: 1) // 一百元素,值为0
    

    2. 获取数组元素的个数

    print(array3.count)
    print(array4.count)
    

    3. 对数组中的元素进行遍历

    for (index, value) in array3.enumerate() {
        // (index)是对数组进行索引运算(取出指定位置的元素)
        print("\(index). \(value)")
        // 可以修改数组元素 
        if i == 1 {
            array3[i] = 777
        }
    }
    
    // 只读循环(在循环过程中不能修改数组元素)- str是String类型
    for str in array3 {
        print(str)
    }
    

    4. 向数组中添加元素

    // append - 追加(添加在数组的最后)
    array3.append(25)
    array3.append(4)
    // insert - 插入(atIndex的值从0开始)
    array1.insert(78, atIndex: 2)
    array1.insert(78, atIndex: array1.count)
    

    5. 数组的其它操作

    array1.removeAll() // 删除所有
    var array5 = array3 // 数组的完全复制
    var array5 = array3[1…3] // 自定义复制位置
    var array5 = array1 + array5 // 数组的加法
    let newArray = array.sort(>) // 升序排列后重新生成一个数组
    array5.sortInPlace() // 排序后代替原数组
    

    简单的综合实例代码

    1. 数组的排序

    • 简单选择排序:每次从剩下的元素中找最小的元素放到对应的位置

    var array = [29, 48, 23, 55, 5, 9, 86]
    print(array)
    // i从第一个元素循环到第n-1个元素
    for i in 0..<array.count - 1 {
        // 每次循环开始假设第一个元素为最小值(将第一个元素的索引号赋给minIndex)
        var minIndex = i
        // j从i后面一位元素循环到最后一个元素
        for j in i + 1..<array.count {
            // 每次循环找到更小的元素后将索引赋值给minIndex
            if array[j] < array[minIndex] {
                minIndex = j
            }
        }
        // 利用元组的方式把最的小元素交换到每次循环的最前面
        (array[i], array[minIndex]) = (array[minIndex], array[i])
    }
    print(array)
    
    • 冒泡排序:两两比较,前面的元素比后面的大就交换位置

    // i从第一个元素循环到第n-1个元素
    for i in 0..<array.count - 1 {
        var swapped = false //当前未发生两两交换
        // i每循环一次j就少一次循环
        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 {
            break
        }
    }
    print(array)
    

    2. 百元百鸡(公鸡5元/只,母鸡3元/只,小鸡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. Craps(双骰子游戏)

    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("你破产了!!!")
    

    抄家伙,开始干吧!还等什么!!!(づ ̄ 3 ̄)づ


    my.jpg

    相关文章

      网友评论

        本文标题:Swift第一周学习总结

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