• Lesson_Swift2


    // Playground - noun: a place where people can play
    
    import UIKit
    
    //=================================================================
    //函数
    //
    //    func 函数名 (参数列表) -> 返回类型 {
    //        代码块
    //    }
    
    
    func sayHi(name: String) -> String {
        return "Hi, " + name
    }
    
    
    var letter = "aeibcd1234"
    //a i b
    //e c d
    //数字
    
    func countLetter(letter: String) -> (Int, Int, Int) {
        var aib = 0
        var ecd = 0
        var num = 0
        
        for c in letter.lowercaseString {
            switch c {
            case "a", "i", "b":
                aib++
            case "e", "c", "d":
                ecd++
            default:
                num++
            }
        }
        
        return (aib, ecd, num)
    }
    
    countLetter(letter)
    
    
    //=================================================================
    //函数类型的变量
    //有点类似之前学过的函数指针
    var funcType: String -> String = sayHi
    funcType("蓝鸥")
    
    func sayBye(name: String) -> String {
        return "Bye! " + name
    }
    
    funcType = sayBye
    funcType("蓝鸥")
    
    //参数没有名字,我们需要添加一个外部形参
    //1.在参数前加一个外部形参名 注:不能在函数中使用外部形参名
    //2.在参数名前加 #
    func personInfo(name personName: String, #sex: String, _age: String = "18") -> String {
        return personName + " " + sex + " " + _age
    }
    
    personInfo(name: "隔壁老王", sex: "男")
    
    //可变参数, 都是相同类型的参数
    func sum(numbers: Float...) -> Float {
        var sum: Float = 0.0
        
        for number in numbers {
            sum += number
        }
        
        return sum
    }
    
    sum(1.0, 2.0, 3.0, 4.0, 5.0)
    
    //如果需要用到参数运算(修改参数的值), 需要在此之前加var修饰
    func hanshu(var a: Int, b: Int) {
        a += 3
    }
    
    var number = 5
    
    var number1 = 5
    var number2 = 3
    
    // inout关键字: 如果说我们改变传递的值,则需要用inout修饰变量
    //传递参数的时候,需要用&
    
    func swap(inout number1: Int, inout number2: Int) {
        var temp = number1
        number1 = number2
        number2 = temp
    }
    
    swap(&number1, &number2)
    number1
    number2
    
    func sixPlus(price: Float) -> Float {
        return price * 0.8
    }
    
    
    //函数类型作为返回值
    //隐藏掉 不希望被人能看到内部的方法
    func changeValue(plus: Bool) -> Int -> Int {
        func plusOne(number: Int) -> Int {
            return number + 1
        }
        
        func minusOne(number: Int) -> Int {
            return number - 1
        }
        
        return plus ? plusOne : minusOne
    }
    
    changeValue(true)
    var cc: Int -> Int = changeValue(false)
    cc(20)
    
    
    //=============================================================
    //闭包
    //闭包跟OC的block一样
    
    //用法
    //{
    //      (参数列表)->返回值 in
    //      闭包的实现
    //{
    
    
    var names = ["Qiaoming", "kan", "taobao"]
    
    var sortedNames1:() = sort(&names, {
        (stringA: String, stringB: String) -> Bool in
        return stringA > stringB
    })
    
    names
    
    
    //去掉类型,通过类型推断自动获取类型
    //单行可以去掉return
    var sortednames2:() = sort(&names, {
        (s1, s2) -> Bool in
         s1 < s2
    })
    
    names
    
    //---------------------------------------
    var sortesNames3:() = sort(&names, {
        return $0 > $1
    })
    // $0表示第一个数 $1表示第二个数
    names
    
    
    //---------------------------------------
    var sortesNames4:() = sort(&names, <)
    names
    
    
    //---------------------------------------
    sort(&names) { (s1, s2) -> Bool in
        return s1 > s2
    }
    names
    
    //=====================================================================
    //类 结构体
    
    /**
        相同点:
        1.都可以定义属性
        2.都可以定义方法,这是swift跟oc的明显的区别之一
        3.都可以定义构造器(初始化方法)
        4.都可以遵循协议
        5.都可以被扩展
    
        不同点:
        1.类可以继承,而结构体不能
        2.类可以被类型推断
        3.类可以通过析构释放内存
        4.类他是引用类型,结构体是值类型
    */
    
  • 相关阅读:
    条形码识别
    使用边缘检测,将图像旋转到水平位置
    pyzbar 安装
    关于跑别人代码中遇到的问题
    %matplotlib inline
    git 相关流程和报错解决
    原码、反码和补码
    opencv 图像resize
    前端跨域解决方案汇总
    vuecli3 引入构建版本的2种方式
  • 原文地址:https://www.cnblogs.com/newBlash/p/4273613.html
Copyright © 2020-2023  润新知