美文网首页iOS-swiftswiftswift编程开发
Swift中高阶函数map、flatMap、filter、red

Swift中高阶函数map、flatMap、filter、red

作者: 那么你就是我的 | 来源:发表于2017-09-15 10:30 被阅读169次

    Swift相比于Objective-C又一个重要的优点,它对函数式编程提供了很好的支持,Swift提供了map、filter、reduce这三个高阶函数作为对容器的支持。

    1.map 函数可以对数组的每一个元素进行处理

        // 计算字符串的长度
        let stringLength = ["Objective-C", "Swift"]
        // $0代表数组中的每一个元素
        stringLength.map{   
           return $0.characters.count
         }
    
    
        
      // 数组的每一个元素是相应的元祖
      let controllerInfo: [(String, String, UIViewController.Type)] = [
            ("夺宝", "duobao", MainController.self),
            ("最新揭晓", "zuixin", CompletedActivityController.self),
            ("晒单", "shaidan", CommunityController.self),
            ("购物车", "gouwuche", ShoppingController.self),
            ("我的", "geren", MineController.self)
        ]
        
        override func viewDidLoad() {
            super.viewDidLoad()
           // 通过map函数 获取每一个元祖
            self.viewControllers = controllerInfo.map({ (title, img, viewController) -> UINavigationController in
                let vc = viewController.init()
                vc.tabBarItem.image = UIImage(named: img)
                vc.tabBarItem.title = title
                vc.tabBarItem.setTitleTextAttributes([NSForegroundColorAttributeName: Theme.themeColor], for: .selected)
                return CommonNavController(rootViewController: vc)
            })
        }
    

    2.flatMap 与 map 函数的不同处:
    (1)flatMap返回后的数组中不存在nil,同时它会把Optional解包

        let oneArray = ["name", "age", "height", ""]
    
        let length = oneArray.map { $0 -> Int? in
            let stringLength = $0.characters.count
            guard stringLength > 0 else {return nil} 
            return length  
         }
         legth // [4, 3, 6, nil]
    
        let length = oneArray.flatMap { $0 -> Int? in
             let stringLength = $0.characters.count
             guard stringLength > 0 else { return nil}    
             return stringLength    
      }    
        length // [4, 3, 6]
    

    3.filter 可以对数组中的元素按照某种规则进行一次过滤

    let oneArray = ["name", "age", "height"]
    // $0表示数组中的每一个元素
     
    stringArray.filter{ $0 -> Void in   
       if $0.characters.count > 4 {
           print($0)
           // height 
       }
    }
    

    4 reduce:计算,可以对数组的元素进行计算

    let p1 = [20,20,10]
    // $0 代表计算的值  $1代表元素
    let sum = p1.reduce(0) { $0+$1 }
    print(sum) //50
    

    相关文章

      网友评论

        本文标题:Swift中高阶函数map、flatMap、filter、red

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