美文网首页
Swift 学习 day03 2016.1.20

Swift 学习 day03 2016.1.20

作者: LB_Zhang | 来源:发表于2016-01-20 20:00 被阅读35次

    字典 集合 函数

    //一直记不住什么是可选绑定

    1.创建一个字典

    var dictionary : Dictionary<String, Int> = Dictionary<String, Int>()//最标准的声明一个字典
    var dictionary2 = Dictionary<String, Int>()
    
    var dictionary6 : [String:Int] = [String:Int]()//个人认为这种事最简单地声明
    var dictionary7 : [String:Int] = ["age":37, "age2":18]
    var dictionary8 = ["age":37, "age2":18] //个人认为这种是最简单地写出一个字典
    
    

    字典增

    如果key不存在 是 添加 如果存在是修改原内容
    
    var airports : [String : String] = ["PEK":"北京首都机场", "CAN":"广州白云机场", "SHA":"上海虹桥机场"]
    /******* 增 **********/
    //如果key不存在 是 添加  如果存在是修改原内容
    airports["SZX"] = "深圳宝安机场" //简单写法
    airports.updateValue("上海浦东机场", forKey: "PVG")//标准写法
    airports["TRA"] = "达内机场"
    print(airports)
    

    字典删

    //可选绑定
    if let airport = airports.removeValueForKey("TRA") {
        print("\(airport) 删除成功")
    }else {
        print("没有对应的机场")
    }
    

    字典改

    airports["SZX"] = "高级深圳宝安机场"
    print(airports)
    //返回修改前的内容
    if let oldValue = airports.updateValue("深圳宝安机场", forKey: "SZX") {
        print("删除成功 删除前是 \(oldValue)")
    }else {
        print("没有找到要删除的机场, 添加新的机场")
    }
    

    字典查

    if let airportName = airports["SZX"] {
        print("找到对应机场 \(airportName)")
    }else {
        print("没有找到对应机场")
    }
    

    字典遍历

    
    for (airportCode,airportname) in airports{
        print("字典 key \(airportCode) 对应的 value \(airportname)")
    }
    
    
    //可以通过字典的所有key 来创建一个数组
    let airportCodes : [String] = [String](airports.keys)
    //可以通过字典的所有value 来创建一个数组
    let airportNames : [String] = [String](airports.values)
    
    

    2.集合

    其实集合字典数组 根 OC 里面的差不多,就是写法不一样了而已
    Set 和数组的区别:没有重复的数据 ,无序

    
    var favoriteGenres : Set<String> = ["Rock", "Classical", "Jazz", "Hip hop"]
    
    var favoriteGenres : Set<String> = ["Rock", "Classical", "Jazz", "Hip hop"]
    
    //查看 集合中 是否包含 指定元素
    favoriteGenres.contains("Jazz")
    
    
    //给集合排序 
    for genre in favoriteGenres.sort() {
        print("排好顺序的元素 是  \(genre)")
    }
    
    
    let oddDigits : Set = [1, 3, 5, 7, 9]
    let evenDigits : Set = [0, 2, 4, 6, 8, 1, 3]
    //并集
    var new = oddDigits.union(evenDigits).sort()
    oddDigits
    new
    //交集
    oddDigits.intersect(evenDigits)
    //把两个集合 都存在元素 去除掉 返回一个新的继承
    oddDigits.subtract(evenDigits)
    //把两个集合中 相同的元素去除掉 用两个集合剩下的元素 来创建一个新的集合并返回
    oddDigits.exclusiveOr(evenDigits).sort()
    
    

    3.function

    /*
    如何声明定义一个函数
    func 函数名称(参数列表) ->返回值类型 {
    函数体
    }
    */
    
    func sayHello(personName : String) ->String {
        let greeting = "Hello " + personName + " !"
        return greeting
    }
    
    
    
    
    
    //有多个返回值  结合元组
    let string = "我爱你, 我想你, 我喜欢你, 我恨你, 我嫁你"
    func count(str : String) ->(me:Int,you:Int,other:Int) {
        var m = 0, y = 0, o = 0
        for char in str.characters {
            switch char {
            case "我":
                m++
            case "你":
                y++
            default:
                o++
            }
        }
        return (m, y, o)
    }
    
    let result /*: (me:Int, you:Int, others:Int)*/ = count(string)
    result.me
    result.you
    result.other
    result.0
    result.1
    result.2
    
    

    函数的形参 (外部名,内部名)

    
    //函数的行参
    func fa(localName/*参数的内部名*/ : Int) {
        //内部名 是 函数里面使用的
        print("\(localName)")
    }
    fa(100)
    
    func fa(externalName/*参数的外部名*/ localName/*参数的内部名*/ : Int) {
        //内部名 是 函数里面使用的
        print("\(localName)")
    }
    //参数的 外部名 在调用参数时使用 (函数外面使用)
    fa(externalName : 100)
    
    
    //函数的第二个及以后的参数名称,默认即是外部名,也是内部名
    func show(name : String, age : Int) {
        //name 是内部名
        //age 既是内部名 也是 外部名
        print("\(name) 的年龄是 \(age)")
    }
    //age 是外部名
    show("张三", age: 30)
    
    //如果不希望使用默认的外部名 可以自己起外部名
    func pointWithX(x : Int, AndY y : Int) {
        //x 和 y 都是内部名   AndY是外部名
        print("Point( \(x), \(y) )")
    }
    
    
    //使用 _  取消外部名
    func point(x : Int,_ y : Int) {
        print("Point( \(x), \(y) )")
    }
    
    
    
    //参数的默认值  如果有默认值得参数,我们传入任何内容就使用默认值,如果传了内容就使用我们传入的
    func printArray(array : [Int], s : String = ",", flag : Bool = false) {
        if flag {
            print("[")
        }
        for var i = 0; i < array.count - 1; i++ {
            print("\(array[i])\(s)")
        }
        print(array[array.count-1])
        if flag {
            print("]")
        }
    }
    
    
    //可变长参数 使用...
    func arithmeticMean(numbers : Double...) ->Double{
        var total = 0.0
        for number in numbers {
            print(number)
            total += number
        }
        return total / Double(numbers.count)
    }
    
    

    //函数的参数默认情况下 是 常量, 如果需要在函数中修改参数必须声明成变量

    
    func fa(var x : Int) {
        x = 105
        print(x)
    }
    fa(100)
    

    //inout 输入输出参数 相当C中传地址

    func mySwap2(inout x : Int, inout y : Int) {
    //    let t = x
    //    x = y
    //    y = t
        x = x ^ y //异或
    //        0011
    //        0101
    //    x =----------
    //        0110
        y = x ^ y
    //        0110
    //        0101
    //    y =----------
    //        0011   3
        x = x ^ y
    //        0110
    //        0011
    //    x =----------
    //        0101   5
    }
    
    //输入输出参数 传的时候必须 加 & 符号
    mySwap2(&a, y : &b)
    

    //结构 nil 返回的返回值一定是可选值

    //结构 nil 返回的返回值一定是可选值
    func minMax(array : [Int]) ->(max : Int, min : Int)? {
        if array.isEmpty {
            return nil
        }
        return (array[0], array[0])
    }
    

    /****** 函数类型 *********************/

    
    func sayHello() {  //()->()
        print("hello")
    }
    //(Int,Int)->Int
    func addTwoInts(a:Int, b:Int) ->Int{
        return a + b
    }
    func subTwoInts(a:Int, b:Int) ->Int{
        return a - b
    }
    
    
    
    
    //闭包函数
    mc.getResult({ (a, b) -> Int in
        return a % b + 200
        }
    )
    
    var _as : [Int] = [1, 2, 3, 4]
    _as[0]
    //函数数组
    var funcs : [(Int,Int)->Int] = [addTwoInts, subTwoInts, mulTwoInts]
    funcs[0](100, 200)
    funcs[1](100, 200)
    funcs[2](100, 200)
    
    //函数做为返回值
    func test() ->(Int,Int)->Int {
        return addTwoInts
    }
    test()(100, 200)
    
    

    自己觉得不难,,消化的还行,跟 OC 差不多
    明天去面试 ,不能上课了 good luck!

    相关文章

      网友评论

          本文标题:Swift 学习 day03 2016.1.20

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