阅读更多

0顶
0踩

编程语言
本文出自:Natasha The Robot,作者:Natasha Murashev,译文出自:SwiftGG,译者:张伟璐

昨天,我在代码库中找到一段我所认为的极具Swift风格的代码。
var minionImages = [UIImage]()
for i in 1...7 {
    if let minionImage = UIImage(named: "minionIcon-\(i)") {
        minionImages.append(minionImage)
    }
}

这真是使用函数式编程进行重构的绝佳机会,哦吼吼!我可以做函数式编程了!!!是的,我非常激动。

那么,明显的解决方案是在这儿使用map:
let minionImagesMapped = (1...7)
    .map { UIImage(named: "minionIcon-\($0)") }

我对自己感到很满意,这段代码只有一行。但这样做无法满足之前的一个必要条件——我需要[UIImage]数组,但是这段代码返回的是可选类型[UIImage?]数组。

所以我Google了一下,为了得到非可选类型的UIImages数组,可以使用如下方法:
let minionImagesFiltered = (1...7)
    .map { UIImage(named: "minionIcon-\($0)") }
    .filter { $0 != nil}
    .map { $0! }

这样的确有用,但是我并不开森。这段代码又长又拙笨,而且我讨厌强制解包可选类型,虽然这里不会出错。不过这都是小事,主要的原因是这样看起来并不像原生for循环那样简单有效。如下图所示:



可能这样做是错的,但是我最后还是选择了for循环。我的结论是:在Swift中偶尔使用for循环是可以的。当然我可能遗漏了一些东西,如果有,请在评论中告诉我!

升级

由于有些童鞋在下面的评论中以及Twitter上指出,可以在这里使用 Swift 2.0 的flatMap,我进行了修改:
let minionImagesFlattened = (1...7).flatMap { UIImage(named: "minionIcon-\($0)") }

在这里,我不得不诚实的说,每次看到flatMap时,我都无法完全理解它做了什么或是怎么做的。它并不像map以及filter那样自然。我不懂它在这儿是怎么做的,所以必须要去搜索一下。

由此,我再次得出结论:使用flatmap不能提高代码可读性。如果那些对Swift和函数式编程了解不多的人看到这段代码,他们能理解发生了神马吗?相反,我可以确定,每个人只需看一眼就能够理解for循环。
  • 大小: 91.5 KB
来自: SwiftGG
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 函数式 Swift

    objc, objc.io 中国, 函数式 swift 王巍 喵神 onevcat swift

  • Swift:什么时候不适合使用函数式方法

    昨天,我在代码库中找到一段我所认为的极具 Swift 风格的代码。var minionImages = [UIImage]()for i in 1...7 { if let minionImage = ...) { minionImages.append(minionImage) }}这真是使用函数式编程进行重构的...

  • 函数式编程中的Swift与Swift中的函数式编程

    GMTC全球移动技术大会ppt 作者:傅若愚 主题:函数式编程中的Swift与Swift中的函数式编程

  • 函数式Swift.epub

    函数式Swift.epub函数式Swift.epub 函数式Swift.epub函数式Swift.epub函数式Swift.epub函数式Swift.epub函数式Swift.epub函数式Swift.epub函数式Swift.epub函数式Swift.epub函数式Swift.epub

  • 函数式swift4.0

    附件为 iBook的 epub格式电子书:《函数式 Swift》。 本人花几十块大洋购买的,在这里免费分享给大家,需要的请下载!!

  • 函数式Swift 已对应 Swift 4

    《函数式Swift》 高清PDF,需要的赶紧下载了!!《函数式Swift》 高清PDF,需要的赶紧下载了!!

  • 函数式swift 函数式编程(中文版)高清pdf

    《函数式Swift》是一本引领你进入Swift 函数式编程世界的优秀读物,它让更多的中国开发者有机会接触并了解Swift语言函数式的一面,是广大程序开发者不可多得的工具书。

  • 函数式 Swift4 最新版

    objc, objc.io 中国, 函数式 swift 王巍 喵神 onevcat swift4

  • 函数式 swift

    《函数式Swift》是一本引领你进入Swift 函数式编程世界的优秀读物,它让更多的中国开发者有机会接触并了解Swift语言函数式的一面,是广大程序开发者不可多得的工具书。

  • 函数式编程swift4.0

    函数式编程swift4.0 函数式编程swift4.0 函数式编程swift4.0

  • Swift的函数式编程详解

    主要介绍了Swift的函数式编程详解,本文讲解了Swift概览、Swift递归、Swift 的高阶函数和闭包等内容,需要的朋友可以参考下

  • fun-with-swift:使用Swift进行函数式编程的资源

    使用Swift进行函数式编程该存储库包含有关使用Swift进行功能编程的资料。 执照: 演示幻灯片:创用CC,Attribution-NonCommercial-NoDerivatives 4.0 International(请参阅LICENSE_slides.txt) 代码:BSD3(请参阅...

  • 基于Django花卉商城系统的设计与实现-2885fb37-.zip

    基于Django花卉商城系统的设计与实现_2885fb37--.zip

  • 102页-智慧农业解决方案.pdf

    智慧农业,作为现代农业的新篇章,正引领着农业生产的革命性变革。本解决方案以物联网、云计算、大数据等先进技术为核心,为农业生产打造了一套全面、智能的管理系统。 想象一下,从温室大棚到广袤田野,智能传感器遍布每个角落,它们能实时感知空气温湿度、土壤水分、光照强度等环境参数,仿佛为农作物装上了“眼睛”和“耳朵”。这些数据通过物联网技术传输到云端,经过大数据分析,为农民提供精准的种植建议,如何时灌溉、施肥、防虫,让农业生产变得更加科学、高效。 更有趣的是,通过智慧农业平台,农民可以远程监控作物生长情况,甚至用手机就能控制温室大棚的遮阳板、通风设备等,实现“指尖上的农业”。此外,方案还包含了农产品可追溯系统,从田间到餐桌,每一步都可追溯,让消费者吃得放心。而智慧农业电商平台,则让农产品销售更加便捷,农民直接对接市场,收益倍增。 总之,这套智慧农业解决方案不仅让农业生产变得更加智能、高效,还提升了农产品的质量和安全,为农民带来了实实在在的收益,开启了农业现代化的新篇章。 对于想要投身智慧农业领域的你来说,这不仅仅是一套解决方案,更是一把开启现代农业大门的钥匙,引领你走向更加辉煌的未来。

  • 【人工智能模型部署】DeepSeek本地部署与WebUI可视化:环境搭建、模型启动及界面开发指南文档的主要内容

    内容概要:本文档详细介绍了DeepSeek本地部署与WebUI可视化的一般步骤。本地部署方面,涵盖了环境准备(硬件要求如多核CPU、8GB以上内存或带适当显存的NVIDIA GPU,软件环境涵盖操作系统如Ubuntu 20.04及以上版本、Python环境及依赖库如PyTorch或TensorFlow)、获取DeepSeek模型代码和权重(通过官方仓库克隆代码,从指定渠道下载权重)、模型配置与启动(配置模型参数,运行启动脚本以初始化模型和服务)。WebUI可视化部分则推荐了Streamlit和Gradio两种框架,介绍了它们的安装、使用方法(通过编写脚本调用DeepSeek API构建交互界面),以及集成与部署(确保WebUI与模型服务之间的数据正确传递,在本地运行后可通过浏览器访问)。 适合人群:对深度学习模型部署有一定了解的技术人员,尤其是那些希望将DeepSeek模型应用于本地环境并提供用户友好界面的研发人员。 使用场景及目标:①为希望在本地环境中运行DeepSeek模型的研究者或开发者提供详细的部署指南;②帮助用户快速搭建一个带有图形化操作界面的DeepSeek应用,降低使用门槛,提高用户体验。 阅读建议:在阅读时,应根据自己的操作系统环境和硬件条件调整相应的配置要求,同时注意按照官方文档的具体指引操作,确保各组件版本兼容,以便顺利完成部署和可视化工作。

  • MISRA C 2014和MISRA CPP 2008版本

    MISRA C 2014和MISRA CPP 2008版本

Global site tag (gtag.js) - Google Analytics