zoukankan      html  css  js  c++  java
  • 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.类他是引用类型,结构体是值类型
    */
    
  • 相关阅读:
    Azure 虚拟机安全加固整理
    AzureARM 使用 powershell 扩容系统磁盘大小
    Azure Linux 云主机使用Root超级用户登录
    Open edX 配置 O365 SMTP
    powershell 根据错误GUID查寻错误详情
    azure 创建redhat镜像帮助
    Azure Powershell blob中指定的vhd创建虚拟机
    Azure Powershell 获取可用镜像 PublisherName,Offer,Skus,Version
    Power BI 连接到 Azure 账单,自动生成报表,可刷新
    Azure powershell 获取 vmSize 可用列表的命令
  • 原文地址:https://www.cnblogs.com/newBlash/p/4273613.html
Copyright © 2011-2022 走看看