我开始学习Swift语言,并且无法绕过Protocols,Structs和Classes。
我来自Android方面的编程,所以我相信Swift Protocols基本上是Java接口?
每种情况的适当用例是什么?
答案 0 :(得分:41)
这些类比不是"确切地说"是正确的,但这是我理解的要点
是的,协议实际上就像接口
类是类,如Java / Android,几乎任何其他语言
结构类似于类,但是当它们从一个变量/函数传递给另一个变量/函数时,它们通过值(复制)传递。 如果你完全熟悉C#,它的结构实现非常相似。
例如:
class Foo {
...
}
let x = Foo()
let z = x
此时x和z都引用内存中的相同Object,只有一个Foo
对象
struct Bar {
...
}
let a = Bar()
let b = a
分配b时,复制a(想想基本上复制内存块)。此时,内存中有两个独立的Bar
对象,修改一个对象不会影响另一个。
为什么这有用?有时您不想要共享引用,但主要是出于性能原因。因为结构不必全部引用相同的对象,所以它们不必在堆上分配。相反,它们通常可以在堆栈上分配,而很多更快。结构数组也可以实现为一个大的连续内存块,这意味着如果你想迭代它,它在CPU缓存上会更友好。
Swift不是垃圾收集,但对于像C#这样的垃圾收集语言,这可能意味着垃圾收集器不必处理它可能不得不处理的许多对象。即使在swift中,结构复制也意味着它可以避免在ARC后面的Retain
/ Release
进行必要的操作,这可以提供很多帮助。
结构的主要用例是当你有大量不可变的简单数据时#34;像一个Vector(一组3个浮点值)