美文网首页
对于Swift的初步了解

对于Swift的初步了解

作者: 老韩在简书 | 来源:发表于2016-08-06 16:44 被阅读0次

    我与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.编程无处不在,处处皆编程,要真正喜欢上它,别觉得它是负担和累赘!

    ** 第一次编写这种文档,看完后打赏一下哦!**
    谢谢!!!

    相关文章

      网友评论

          本文标题:对于Swift的初步了解

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