博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
防止序列为空
阅读量:7121 次
发布时间:2019-06-28

本文共 1356 字,大约阅读时间需要 4 分钟。

作者:Erica Sadun,,原文日期:2016-05-11

译者:pucca;校对:;定稿:

昨天在 Swift-Users 有人提问如何防止序列(sequence)为空。这个问题来源于如何在断言(predicate)中测试一个序列,由此引发的问题是如果序列为空,会返回 true 来满足断言。

我们先不考虑这种处理是否有问题(我认为这种处理是正确的,因为一个空序列里没有元素,对元素的断言也就不会失败),Jeremy Pereira 提出了一个相当巧妙的解决方案:

func all(@noescape where predicate: Generator.Element throws -> Bool) rethrows -> Bool {    var count = 0       for element in self {        guard try predicate(element) else { return false }        count += 1       }       return count > 0}

但从此讨论中延伸出的另一个大问题是“如何优雅地判断一个序列是否为空?”。我的方法是用缓冲区(buffer)并进行预处理。以下是我的第一次尝试,粗糙不堪,请不吝指教。

public struct BufferedSequence:GeneratorType, SequenceType {        internal var _base: Base    internal var _generator: Base.Generator    public var bufferedElement: Base.Generator.Element?        public init(_ base: Base) {        _base = base        _generator = base.generate()        bufferedElement = _generator.next()    }    public mutating func next() -> Base.Generator.Element? {        defer {            if bufferedElement != nil {                bufferedElement = _generator.next()            }        }        return bufferedElement    }        public func isEmpty() -> Bool {        return bufferedElement == nil    }}

有趣的是,写这个小东西最难的不是如何进行预处理,而是将 Swift 3 的语法转换回 Swift 2.2,这样我就能在 playground 中进行混编了。

你的语法转换进行的怎样了?已经全部转换成 3 的语法了?还是坚守 2.2 写生产代码?

本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 。

转载地址:http://eksel.baihongyu.com/

你可能感兴趣的文章
C++学习之基本概念
查看>>
el captain设置环境变量
查看>>
Educational Codeforces Round 37 A B C
查看>>
UVA 129 Krypton Factor(DFS 回溯)
查看>>
小程序(一)
查看>>
POJ 2689
查看>>
java 继承 String类
查看>>
开始gentoo之旅
查看>>
【python+flume+kafka+spark streaming】编写word_count入门示例
查看>>
HDU1693 Eat The Trees(插头dp)
查看>>
VR+時尚
查看>>
部署Hadoop高性能集群
查看>>
zabbix Maintenance维护周期
查看>>
Exchange server 2013(十四)WSUS部署及组策略设置(1)
查看>>
在VMWare中安装Windows Server Core
查看>>
2016最新高薪必备老男孩MySQL数据库DBA核心视频
查看>>
40.Azure更改VM可用性集
查看>>
核显也能玩游戏,OS X Yosemite优化指南
查看>>
读《LDAP详解——IBM Tivoli Directory Server从入门到精通》一书
查看>>
从化工技术员到微软最有价值专家(MVP)--我的IT从业路
查看>>