swift – 元素是可选的生成器如何知道它们何时到达终点?
Swift
GeneratorType参考文献说明了下一个方法:
然后在讨论中说
如果Generator是可选类型,那么它可能在到达序列结束之前达到零值. Swift如何知道在这种情况下它还没有达到目的?
重要的是要注意,无论生成器生成什么类型??,它都会将该类型包装在一个可选项中.
GeneratorType协议声明一个它调用Element的关联类型和一个方法next(),它的返回类型是Element?类型.无论是什么元素,next()都将它包装在一个可选中(记住,可选只是一个枚举). 因此,生成选项的生成器将这些选项包装在另一个可选层中. 考虑以下: let array: [Int?] = [1,2,nil,4,7,8,11] 这是一个可选整数数组. 因此,如果我们在这个数组上调用generate(),它将为我们提供返回类型的东西Optional< Optional< Int>>或者Int ??来自next()方法. 前两个调用next将给出值(1,然后是2).第三个看起来像是返回nil: 但实际上这只是误导性的信息.实际上,第三个回报实际上就是这样:可选.有些(无) 我们可以看到,通过查看此while循环可以生成更多值,该循环由11之后生成的实际nil终止: 我们看到print的所有nil值实际上是Optional.Some(nil),当next()调用最终返回Optional.None时,循环终止. 我们在这里看到的是以下三个值可能值之间的差异: let optionalSomeValue: Int?? = 3 let optionalSomeNil: Int?? = Optional.Some(nil) let optionalReallyNil: Int?? = nil 请注意,第二行也可以写为: let optionalSomeNil: Int?? = Optional.Some(Optional.None) 在一天结束时,我们必须记住,optional是一个通用的枚举: enum Optional<T> { case Some(T) case None } T可以是什么没有限制,这意味着它本身可以是一个可选的,它可以是一个可选的案例无. 在Swift中,nil关键字只是Optional< T> .None和?的便捷快捷方式.声明选项的语法同样是Optional< T> .Some的方便快捷方式.考虑以下两行除了变量名之外的每种方式都是等效的: let foo = Optional<Int>.None let bar: Int? = nil (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |