Swift开发ios开发

Swift基础-03(数组和字典)

2017-05-07  本文已影响11人  思考的快与慢
1.Swift中数组基本使用
   func demo()  {
        
        let array = ["张三", "李四", "王五"]
        print(array)  //  ["张三", "李四", "王五"]
        
        let array2 = [1,2,4,5]
        print(array2) // [1, 2, 4, 5]
        
        let p = CGPoint(x: 10, y: 100)
        let array3 = [p] 
        print(array3) // [(10.0, 100.0)]
        
        // 混合数组 在开发中几乎不用,因为在数组中是靠下表进行索引的
        // 如果在数组中的类型不一致,就会自动推到的结果[NSObject]
        // 在swift中,还有一种类型[AnyObject] -> 任意对象
        // 在swift中,一个类可以没有子类
        // let arrar4 = [1, "张三", NSValue(cgPoint: p)]
        // print(arrar4)
    }

``

  func demo2() {
        
        // 按照索引遍历
        print("1.按照索引遍历")
        let array = ["张三", "李四", "王五"]
        for i in 0..<array.count {
            print(array[i])
        }
        
        // for in 遍历
        print("2.for in 遍历")
        for s in array {
            print(s)
        }
        
        // enum + block 遍历,同事遍历下标和内容
        // option + click
        print("3.enum + block 遍历,同事遍历下标和内容")
        for e in array.enumerated() {
            print(e)
            print("\(e.offset) \(e.element)")
        }
        
        print("4.索引下标遍历")
        for (n, c) in array.enumerated() {
            print("\(n): \(c)")
        }
        
        print("5.反序索引遍历,错误的写法")
        for (n, s) in array.reversed().enumerated() {
            print("\(n) \(s)")
        }
        
        print("6.反序索引遍历,正确的写法")
        // 需要先遍历在反转
        for (n, s) in array.enumerated().reversed() {
            print("\(n) \(s)")
        }
    }
    func demo3() {
        
        var array = ["张三", "李四", "王五"]
        
        // 追加
        array.append("赵六")
        print(array)

        // 修改
        array[0] = "🌈";
        print(array)

        // 数组越界
//        array[5] = "王八"
        
        array.remove(at: 2)
        print(array)
        
        array.removeAll(keepingCapacity: true)
        print("\(array) \(array.capacity)")  // [] 6
    }
        var arrar = [Int]()  // 定义一个空数组
        print("初始容量 \(arrar.capacity)")
        for i in 0..<15 {
            print("容量 \(arrar.capacity)")
            arrar .append(i) 
        }
        print("容量 \(arrar.capacity)")
        // 通过打印结果,我们可以看出容量的开辟都是以2的次幂进行开辟的
        初始容量 0
        容量 0
        容量 2
        容量 2
        容量 4
        容量 4
        容量 8
        容量 8
        容量 8
        容量 8
        容量 16
        容量 16
        容量 16
        容量 16
        容量 16
        容量 16
    func demo6() {
        
        let array = ["张三", "李四", "王五"]
        let array2 = ["张三", "李四"]
        print(array + array2) // ["张三", "李四", "王五", "张三", "李四"]
    
        // let array3 = ["张三", "李四", 18] // 这种定义是错误的
        let array4 = ["张三", "李四", 18] as [Any]
        
        // 需要�注意的是讲两个数组合并的时候,要保证这两个数组中元素的类型要一致,所以下面的直接拼接是错误的
//        print(array + array4)

    }
2.Swift中字典基本使用
    func demo1() {
        
        let dict: [String:Any] = ["name":"超", "age":18]   // 由于字典中的元素是不同的类型,所以需要指定类型
        let dict2 = ["name":"超", "age":"18"]  // 数组中元素类型一直,可以不用指定,我们在定义字典的时候,最好是指定上,这一点和OC中的指定泛型很像。
        
        let  arrar: [[String:Any]] = [
            ["name":"洋葱", "age":18],
            ["name":"数学", "height":180]
        ]

        print(dict)  // ["name": "超", "age": 18]
        print(dict2) // ["name": "超", "age": "18"]
        print(arrar) // [["name": "洋葱", "age": 18], ["name": "数学", "age": 180]]
    }

定义字典的数组需要注意的地方

     A class for converting JSON to Foundation objects and converting Foundation objects to JSON.
     一个类从JSON转化为 Foundation 对象或者 Foundation对象转化为JSON

     An object that may be converted to JSON must have the following properties:
     所有对象能被转化为 JSON(字典或者数组) 必须准守以下规则
     
     - Top level object is an NSArray or NSDictionary
     定义节点必须是  NSArray or NSDictionary
     
     - All objects are NSString, NSNumber, NSArray, NSDictionary, or NSNull
     所有的对象必须是 NSString, NSNumber or NSNull
     
     - All dictionary keys are NSStrings
     所有字典的key必须是字符串
     
     - NSNumbers are not NaN or infinity
     NSNumbers 不能为 nil 或者无穷大
   func demo2() {
        
        var dict: [String:Any] = ["name":"超", "age":18]

        // 新增
        dict["title"] = "boss"
        print(dict)
        
        // 修改
        dict["name"] = "洋葱数学"
        print(dict)
        
        // �删除制定的key
        dict.removeValue(forKey: "age")
        print(dict)
    }
    func demo3() {
        let dict: [String : Any] = ["name": "洋葱数学", "age": 18, "title": "boss"]
        
        for e in dict {
//            print(e)
            print("\(e.key) \(e.value)")
        }
        
        // key value名字可以谁便取
        for (key,value) in dict {
            print("\(key) \(value)")
        }
    }
    // 合并
    func demo4() {
        var dict: [String : Any] = ["name": "洋葱数学", "age": 18, "title": "boss"]
        let dict2: [String : Any] = ["name": "洋葱数学", "title": "boss"]

        for e in dict2 {
            dict[e.key] = dict2[e.key]
        }
        print(dict) // ["name": "洋葱数学", "age": 18, "title": "boss"]
    }
上一篇下一篇

猜你喜欢

热点阅读