Swift:协议与结构与类

我开始学习Swift语言,并且无法绕过Protocols,Structs和Classes。

我来自Android的编程方面,所以我相信Swift协议基本上是Java接口?

什么是正确的用例每个这些?

这些类比并不是“完全正确”的,但正如我所理解的那样,这就是它的要点

  1. 是的,协议是有效的接口

  2. 类是类,就像在Java / Android,几乎任何其他语言

  3. 结构像类,但是当它们从一个variables/函数传递到另一个时,它们被传值(复制)。 如果你对C#完全熟悉,那么struct的实现是非常相似的。

例如:

class Foo { ... } let x = Foo() let z = x 

此时x和z都指向内存中的同一个对象,只有一个Foo对象

 struct Bar { ... } let a = Bar() let b = a 

分配b时,复制a(考虑基本上复制存储块)。 此时,内存中有两个独立的Bar对象,修改一个不会影响另一个。

为什么这是有用的? 有时你不需要共享引用,但主要是出于性能原因。 因为结构体不必全都指向同一个对象,所以它们不必在堆上分配。 他们可以经常被分配在堆栈上,速度快得多。 也可以将结构数组实现为一个大的连续内存块,这意味着如果您想遍历所有内存,则在CPU高速caching上更友好。

Swift并不是垃圾收集,但是对于像C#这样的垃圾收集语言来说,这可能意味着垃圾收集器不必处理很多可能需要的对象。 即使在迅速的结构复制意味着它可以避免在ARC的幕后需要Retain / Release ,这可以帮助很多。

结构的主要用例是当你有很多像Vector这样的不变的“简单数据”(一组3个浮点值)