美文网首页Swift开发ios开发
Swift基础-03(数组和字典)

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

作者: 思考的快与慢 | 来源:发表于2017-05-07 18:23 被阅读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
        }
    
    • 数组容量,这个在OC中我们经常使用在创建可变数组的时候
            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"]
        }
    

    相关文章

      网友评论

        本文标题:Swift基础-03(数组和字典)

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