小编Bry*_*jar的帖子

为什么Swift标准库中的reverse()函数返回ReverseRandomAccessCollection?

现在我已经学会了Swift(达到一个合理的水平),我正试图掌握标准库,但实际上它主要是ελληνικά给我!

所以一个特定的问题:我有一个字符串数组,我可以调用reverse().

let arr = ["Mykonos", "Rhodes", "Naxos"].reverse()
Run Code Online (Sandbox Code Playgroud)

现在天真地我以为我会从中找回一种类型的阵列.(例如Ruby有一个类似的方法,你传递一个数组并返回一个数组)

但arr现在实际上是类型

ReverseRandomAccessCollection<Array<String>>
Run Code Online (Sandbox Code Playgroud)

这实际上是一个符合CollectionType的结构:

public struct ReverseRandomAccessCollection<Base : CollectionType where Base.Index : RandomAccessIndexType> : _ReverseCollectionType
Run Code Online (Sandbox Code Playgroud)

这意味着我可以这样做:

for item in arr {
  print(item)
}
Run Code Online (Sandbox Code Playgroud)

但我不能这样做

print(arr[0])
Run Code Online (Sandbox Code Playgroud)

为什么这样设计成这样?

Swift中的字典也实现了CollectionType,所以我可以这样做:

let dict = ["greek" : "swift sometimes", "notgreek" : "ruby for this example"].reverse()
Run Code Online (Sandbox Code Playgroud)

但字典不像数组一样排序,为什么我可以在dicts上调用reverse()?

奖励积分如果有人能指出我可以阅读的方向并改善我的Swift stdlib foo,Ευχαριστώ!

arrays standard-library swift

19
推荐指数
1
解决办法
7102
查看次数

Swift vs Obj-C例外.什么是堆栈展开?斯威夫特为什么不这样做?

Swift Docs中有一条说明如下:

Swift中的错误处理类似于其他语言中的异常处理,使用了try,catch和throw关键字.与许多语言中的异常处理不同 - 包括Swift中的Objective-C-error处理不涉及展开调用堆栈,这可能是计算上昂贵的过程.因此,throw语句的性能特征与return语句的性能特征相当.

在Swift和Obj-c中展开调用堆栈意味着什么?这里的相关问题,但它是C++特定的.我知道调用栈是什么,但想要更详细地解释unwinding.

如果Swift没有展开调用堆栈,它会做什么呢?

为什么这在计算上会很昂贵?

总结:我想更好地理解异常如何工作以及Swift中的执行流程.

exception objective-c swift

8
推荐指数
1
解决办法
821
查看次数

标签 统计

swift ×2

arrays ×1

exception ×1

objective-c ×1

standard-library ×1