swift – 有没有理由为什么array [index]不返回可选项?

swift – 有没有理由为什么array [index]不返回可选项?,第1张

概述我觉得array [index]应该返回一个可选的,因为索引可能超出范围。 这将允许代码,如: if let object = array[index] { // Do stuff} 使用扩展方法很容易做到这一点,但知道这种情况的真正原因将是很好的。 这是 my first Swift radars之一,被关闭为“行为正确”。还讨论了 in the dev forums.如Dave Abra 我觉得array [index]应该返回一个可选的,因为索引可能超出范围。

这将允许代码,如:

if let object = array[index] {  // Do stuff}

使用扩展方法很容易做到这一点,但知道这种情况的真正原因将是很好的。

这是 my first Swift radars之一,被关闭为“行为正确”。还讨论了 in the dev forums.如Dave Abrahams所述:

As to rationale,It’s easy and very common to have static kNowledge that the index is in range…. In this case it’s much better to establish a precondition that the index is valID so that common use-cases don’t have to cope syntactically with a failure that can’t happen. Contrast this with dictionary indexing on keys,where it’s commonly not kNown whether the key is already in the dictionary.

随着我在Swift中的经验越来越丰富,我也同意了。我有时希望内置一个“安全下标”(如Mike Ash’s),但我已经同意它不应该是默认的。

将其设为默认值会使Arrays非常难以使用,不仅仅是因为需要解包,而是因为Index类型不再是Int。要求下标(Index)返回Element(不是Element?)。这就是为什么词典索引不是关键;它是DictionaryIndex< Key,Value>。创建一个特殊的ArrayIndex可能会产生很多烦人的副作用。 (也许它最终都会成功,但是否值得这样做是值得怀疑的。)

这里真正的教训是你应该避免任意下标数组。如果可行,您应该更喜欢将其用作CollectionType。这意味着仅使用您获取的索引(例如indexOf或索引)进行订阅,并且强烈支持迭代(for-in,map)而不是下标。使用xs.first而不是xs [0]。如果您将其视为集合而不是数组,那么您将获得所描述的安全性,同时在需要解决特殊问题时仍然可以使用下标,其中您知道下标在范围内。

这是一个说明性的例子。考虑这个常见的循环,您可能认为需要下标:

let xs = [1,2,3]for i in 0..<xs.count {    print("\(i): \(xs[i])")}

我们可以做得更好一点,不依赖于我们对数组索引的特殊知识,并使其适用于所有集合:

for i in xs.indices {    print("\(i): \(xs[i])")}

但即使这样也没有必要。我们可以做得更好,并使其适用于所有序列:

for (i,x) in xs.enumerate() {    print("\(i): \(x)")}

没有下标要求。

总结

以上是内存溢出为你收集整理的swift – 有没有理由为什么array [index]不返回可选项?全部内容,希望文章能够帮你解决swift – 有没有理由为什么array [index]不返回可选项?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1051957.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存