美文网首页
Swift初学体验

Swift初学体验

作者: 书小楷 | 来源:发表于2016-08-06 16:19 被阅读0次

    学习总结

        学习了两周的Swift,第一周算是对Swift有了一个初步的认识,体会了Swift语言开发的过程以及可视化开发的便利,算是一个愉快的开始,第二周就是铺天盖地的循环,数组这些必须要掌握的语法,尤其是周三周四这两天的连绵不绝的练习,让我觉得在这里学习努力是不够的,要爆肝才行啊!不过,连着学了一周的语法,还是学到了一点东西的。
    

    初识Swift

        作为一门发布了两年就能排在15名之前的语言,虽然有苹果火热的原因,但Swift必然也有它独特的魅力。作为一个初学者,我体会不到它怎样能成为20年内编程语言的霸主,不过既然这么多人追捧,就姑且认为它确实很牛逼。
        不过一句简单的打印"Hello,world!"的程序,却是还是感觉不错的,至少比起其他语言的一大串要好的多。Swift支持代码预览,这个革命性的特性可以允许程序员在不编译和运行应用程序的前提下运行 Swift 代码并实时查看结果,这对我们这些初学者来说是很友好的东西。在定义一个变量或常量的时候设置可以不需要考虑类型的问题,Swift强大的类型推断能力就能搞定这一切。
    

    变量和常量

    使用let来声明一个常量,使用var来声明一个变量

    例如:

    var a = 1
    let b = 2
    var a = b
    

    变量和常量的值永远不会被隐式转换为其它类型,如果需要把一个值转换成其他类型,需要显示转换。

    let label = "The width is"
    let width = 94
    let widthlabel = label + String(width)
    

    还有一种把值转换为字符串的方法叫做 “字符串插值”

    let day = 6
    let today = "今天是星期\(day)"
    

    元组(Tuples)

    用一个变量或者一个常量保存多项数据信息的类型

    let stu:(id:Int,name:String,gender:Bool,age:Int) = (1001,"王钢炮",true,21)
    let (_,姓名,_,年龄) = stu
    //元组取值从0开始,下划线表示忽略,取值时就可以跳过
    

    用元组快捷交换两个变量的值

    (x,y) = (y,x)
    

    标识符的命名规则

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

    运算符

    1.算术运算符(Arithmetic Operators)

    算术运算符主要有 + , - , * , / , % 五个,还有自增(++)和自减(--)两个在Swift3中即将删掉的运算符
    算术运算符的要求就是左右两边的类型必须一样,不然无法运算,有趣的是,swift里还可以进行字符串的 + 运算。
    关于整数的除运算,也有一点要注意;整数除以整数的商就是结果的整数部分,所以321除以100结果就是3,355除以100结果也等于3而不是4,没有四舍五入!

    2.比较运算符(comparison Operators)

    比较运算符又叫关系运算符,有 > , < , == , != , >= , <=六种,产生Bool类型的值,要么是true,要么是false!

    let name = "world"
    if name == "world" {
        print("hello, world")
    } else {
        print("I'm sorry \(name), but I don't recognize you"
    }
    

    3.三元条件运算符(Ternary conditional Operator)

    三元运算符的格式大概就是(question ? answer1 : answer2) 前面的question如果成立,就执行answer1,如果不成立,就执行answer2
    有了三元运算符,就可以替代很多的if语句,可以让代码更简洁。

    4.短路运算符(Logical Operator)

    逻辑与(Logical And) &&
    逻辑或(Loical Or) ||
    逻辑非(Logical Not) !

    let year = 1344
    if ( year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0  {
        print("\(year)年是闰年")
    }
    else {
        print("\(year)年不是闰年")
    }
    

    分支结构

    使用if和switch来进行条件操作,主要有
    if{

    }
    else{

    }
    以及
    switch{
    case:
    case:
    default:
    }
    这两种结构都可以套用if-else里面可以套用switch-case,switch-case里也可以套用if-else的结构,当然if-else也能套用if-else。
    比如:

    // IT从业人员等级评定
    print("请输入你的月薪: ", terminator: "")
    let salary = inputInt()
    if salary >= 0 {
        switch salary {
        case 0:
            print("你是一个无业游民")
        case 1...30000:
            print("你是一个小码畜")
        case 30001...60000:
            print("你是一个小码奴")
        case 60001...100000:
            print("你是一个大码农")
        case 100001...200000:
            print("你是一个光荣的IT民工")
        case 200001...500000:
            print("你是一个优秀的IT工程师")
        case 500001..<10000000:
            print("你是IT精英")
        case 10000000..<100000000:
            print("你是IT大哥, 我服")
        default:
            print("你是头上有光环的IT领袖, 求带")
        }
    }
    else {
        print("你丫有病!!!")
    }
    
    

    循环结构

        使用for_in、for、while、和repeat - while来进行循环。包裹条件和循环变量括号可以省略,语句的大括号还是必须的。
        repeat-while
    
     //repeat-while循环 - 至少执行一次
    var i = 1
    repeat {
        print("\(i). Hello, world!")
        i += 1
    } while i <= 100
    
    
        while
    
     //while循环 - 有可能一次都不执行
    var i = 1
    while i <= 10 {
        print("\(i). Hello, world!")
        i += 1
    }
    
    
        for - in
    
    // for循环
    for _ in 1..<10 {
       print("Hello, world!")
    }
    
    
        在练习这一段的时候,差不多两天的时间不停的练习,确实让人爽了一把。智商余额不足的我每次看到其他人写出来而自己连思路都没有确实很揪心。但是在痛苦的过程中,确实还是学到了一些东西。
    
    let answer = Int(arc4random_uniform(1000)) + 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("你的智商需要充值!")
        }
    

    一个简单的猜数字的游戏用到了repeat-while,怎么用,放在哪里都可以让我琢磨许久。

    // 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("你破产了!!!")
    
        这个赌博游戏更是把这几天所学的知识全都用上了,代码的规范,函数的使用,循环,分支的结构全都涉及到了。
        除此之外,还get到了一个很重要的东西——穷举法:穷尽所有的可能性直到找到正确答案),这就是按照人的思维去算,但是人的运算速度有限,计算某些事情需要耗费太多时间而且容易出错。这里,用计算机使用穷举法就可以完美解决这个问题。计算机强就强在运算快,不易出错。
    
    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)")
            }
        }
    }
    
    

    数组

    数组主要是排序问题
    swift 强大的功能使得这一问题变得非常简单,sort函数轻松解决

    let newArray = array.sort(>)//排序后产生一个新数组
    print(array)
    print(newArray)
    array.sortInPlace()//就在这个数组排序
    print(array)
    
    

    但是只会使用函数永远也不能进步,所以我们需要更复杂的方法来提升自己
    除了用sort函数,我们还有两种方法可以排序

    简单选择排序法

    简单排序是定义(假设?)数组的第一个数为最小的数,依次与数组里的数进行比较,小的放前面,循环次数为数组里元素的个数

    //简单选择排序
    
    var array = ["faker","amazingj","condi","clearlove","martin","looper","swift","easyhoon",]
    for i in 0..<array.count - 1{
    var minIndex = i
    for i in i+1..<array.count{
        if array[i] < array[minIndex]{
              minIndex = i
            
        }
    }
    (array[i],array[minIndex]) = (array[minIndex],array[i])
    }
    print(array)
    
    
    
    冒泡排序法

    冒泡排序:两两比较,前面的元素比后面的元素大就交换位置,再加上优化,排序完成就可以停止循环。适合只有少数顺序不对的数组。

    
    
    var array = [56,37,68,23,99,27,6,77]
    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)
    
    

    经过一周的学习,我清楚的认识到我与其他同学尤其是与10k的差距,确实让人有点沮丧。不过没办法,既来之则安之,既然奔着学(shi)习(k)编(gao)程(xin)来的,就一定要搞定它!

    相关文章

      网友评论

          本文标题:Swift初学体验

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