美文网首页
Swift语法积累

Swift语法积累

作者: Coder_Star | 来源:发表于2019-03-18 19:25 被阅读0次

    一、字符串

    1. subString与String
    • subString是一个全新的类型,看类名像是String的子类,但是大家千万别被误导了,Substring并不是String的子类,这是两个不同的类型,但是它们都继承了StringProtocol协议,因此存在一些共性;在开发中Substring并不常用(一般会在分割String中见到),所以往往要转成String。
    • subString最重要的作用的体现是在性能上,自身在分割时,其实重用了父String的内存,延长了父String的生命周期,当这个subString不被释放,其父String也不被释放。
    1. 字符串分割
      我们可以使用两种方式对字符串进行分割,分别为split以及components方法,两种方法在类型以及分割结果上有着不同结果;
    • split
      分割后的结果为[Substring]类型,
    • components
      分割结果为[String]类型
    • 结果比对
    import Foundation
    
    let x = ".1.2.3.4.5.."
    print("使用split对字符串分割忽略空值结果:\(x.split(separator: "."))")
    print("使用split对字符串分割不忽略空值结果:\(x.split(separator: ".",omittingEmptySubsequences:false))")
    print("使用components对字符串进行分割结果:\(x.components(separatedBy: "."))")
    
    //结果
    使用split对字符串分割忽略空值结果:["1", "2", "3", "4", "5"]
    使用split对字符串分割不忽略空值结果:["", "1", "2", "3", "4", "5", "", ""]
    使用components对字符串进行分割结果:["", "1", "2", "3", "4", "5", "", ""]
    
    //我们可以直接利用String()函数将subString类型转成String
    

    二、Map、filter、reduce、flatMap以及compactMap的使用

    1. Map
      map方法用于对数据中的每一个元素进行处理,然后返回一个新数组,新数组可以是旧数组中的部分属性组成的;
    let str = [12,13,14,15,16,17]
    let str1 = str.map{"\($0)" + "元"} //$0表示数组中每一个元素
    print(str1)
    //结果
    ["12元", "13元", "14元", "15元", "16元", "17元"]
    
    1. filter
      filter函数用于将列表中元素进行过滤,筛选出数组中满足某种文件的元素组成新数组;
    let str = [12,13,14,15,16,17]
    let str2 = str.filter{$0 < 13 || $0 > 15} //$0表示数组中每一个元素
    print(str2)
    //结果
    [12, 16, 17]
    
    1. reduce
      reduce函数用于将数组元素组合计算为一个计算值,并且接受一个初始值,这个初始值的类型可以与数组元素的类型不同;
    let str = [12,13,14,15,16,17]
    let str3 = str.reduce(20){$0 + $1} //$0表示累积器,$1表示数组中每个元素
    print(str3)
    //结果
    107
    
    1. flatMap
      flatMap函数与map函数作用类似,不同点在于它返回的数组中不含有nil(会自动将nil剔除),同时将Optional解包,并且它可以将多维数组拆分变成一维数组,但map不可以。该语法已经在Swift4.1中弃用了,不提供代码示例,代码示例见 5. compactMap
    2. compactMap
      swift4.1语法中,使用compactMap函数替代flatMap函数;
    //自动去除nil以及解包
    let array = ["Apple", "Orange", "Grape", ""]
    let arr1 = array.map{ a ->Int?in
        let  length = a.count
        guard  length > 0 else{return  nil}
        return  length
    }
    let arr2 = array.compactMap{ a ->Int?in
        let  length = a.count
        guard  length > 0 else{return  nil}
        return  length
    }
    print(arr1)
    print(arr2)
    //结果 
    [Optional(5), Optional(6), Optional(5), nil]
    [5, 6, 5]
    
    //多维数组
    let array1 = [[1,2,3],[7,8,9],[4,5,6]]
    let arr11 = array1.map{ $0 }
    let arr22 = array1.flatMap{ $0 }
    print(arr11)
    print(arr22)
    //结果
    [[1, 2, 3], [7, 8, 9], [4, 5, 6]]
    [1, 2, 3, 7, 8, 9, 4, 5, 6]
    

    三、List数组处理

    1. sort函数
      Swift中自带sort函数,可为数组、字典等进行排序。(Swift4.1以后为sorted),代码示例如下:
    //数组字典排序
    let nameList = [
        ["name":"李二","code":"0002","sort":"2"],
        ["name":"李一","code":"0001","sort":"1"],
        ["name":"李三","code":"0003","sort":"3"],
    ]
    //正序
    let sortList = nameList.sorted{ (list1,list2) ->Bool in //普通写法
        return list1["sort"]! < list2["sort"]! 
    }
    //倒序
    let sortList1 = nameList.sorted{$0["sort"]! > $1["sort"]! } //稍高级写法,其实就是将两个闭包返回参数用$0以及$1代替了,下面两种写法也可以
    // let sortList2 = nameList.sorted(){$0["sort"]! > $1["sort"]! }
    // let sortList2 = nameList.sorted(by:{$0["sort"]! > $1["sort"]! })
    
    print(sortList)
    print(sortList1)
    //正序结果
    [["sort": "1", "name": "李一", "code": "0001"], ["sort": "2", "name": "李二", "code": "0002"], ["sort": "3", "name": "李三", "code": "0003"]]
    //倒序结果
    [["sort": "3", "name": "李三", "code": "0003"], ["sort": "2", "name": "李二", "code": "0002"], ["sort": "1", "name": "李一", "code": "0001"]]
    
    

    字符串排序以及字典排序与上面方法类似,其中字符串排序可更加省略闭包参数,如 let sortStr = str.sort(<),字典排序用0以及1代替key以及value,如根据key值排序代码, let result = dic.sort {$0.0 < $1.0}

    相关文章

      网友评论

          本文标题:Swift语法积累

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