美文网首页
Swift基础知识补充(三)

Swift基础知识补充(三)

作者: 落叶刺客 | 来源:发表于2017-05-22 21:26 被阅读15次

      1、集合类型

      Swift中的集合类型主要是指Array、Dictionary和Set,详细情况参见《Swift中常用的数据结构(上)》Array中的元素是有序的,可以重复出现;Set里面的元素是无序的,不能重复出现。另外,Dictionary中的键(Key)和值(Value)也是无序的,并且键(Key)是不能重复的,但是值(Value)却可以重复出现

      声明数组和字典时,既可以使用泛型语法(也称标准语法),又可以使用简写语法。但是,声明Set只能用泛型语法。不过,Set可以借助数组的简写语法来进行快速声明。

      2、值类型参数的引用传递

      函数参数的传递有两种:值类型和引用类型。值类型传递的是参数的一个副本,它在函数调用的过程中不会影响原始数据;引用类型是把数据本身(也就是内存地址)传递过去,它在函数调用的过程中可以影响原始数据

      在Swift中,除了类之外,常见的原生数据类型都是值类型。在实际开发过程中,有时候需要将值类型参数作为引用的方式进行传递。Swift中提供了一个关键字inout专门用来处理这种情况。使用inout修饰的参数被称为输入输出参数。函数在调用时,参数前面要加上取地址符&。inout和取地址符是相互对应的。以我在《算法基础知识导引》中讲解的插入排序为例:

    // 插入排序的代码实现
    func insertionSort(alist : inout [Int]) {
        
        // 遍历数组中下标从1到alist.count - 1的元素
        for i in 1..<alist.count {
            
            // 将遍历出来的元素存储到临时变量tmp中
            let tmp = alist[i]
            
            // 给已经排好序的元素下标赋值
            var j = i - 1
            
            // 下标j有意义,并且元素alist[j]的值比元素tmp大时
            while j >= 0 && alist[j] > tmp {
                
                // 将元素alist[j]的值赋值给下标为i(也就是下标为j + 1)的元素
                alist[j + 1] = alist[j]
                
                // 将下标j的值减1
                j = j - 1
            }
            
            // 将tmp赋值给原来下标值为j(也就是现在下标值为j + 1)的元素
            alist[j + 1] = tmp
        }
    }
    
    // 声明一个未经排序的数组
    var myIntArr : [Int] = [56, 17, 63, 34, 77, 52, 68]
    
    // 利用插入排序对原来的数组进行重新排序
    insertionSort(alist: &myIntArr)
    

      在上述代码中,函数insertSort()的参数是用inout修饰的,所以在函数调用的时候,它传递的是数组的引用地址,并且经过排序之后,原始数组中的值也发生了变化。

    相关文章

      网友评论

          本文标题:Swift基础知识补充(三)

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