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.类他是引用类型,结构体是值类型
    */
    
  • 相关阅读:
    SuperMap房产测绘成果管理平台
    SuperMap产权登记管理平台
    Android adb shell am 的用法(1)
    由浅入深谈Perl中的排序
    Android 内存监测和分析工具
    Android 网络通信
    adb server is out of date. killing...
    引导页使用ViewPager遇到OutofMemoryError的解决方案
    adb logcat 详解
    How to send mail by java mail in Android uiautomator testing?
  • 原文地址:https://www.cnblogs.com/newBlash/p/4273613.html
Copyright © 2011-2022 走看看