簡體   English   中英

Swift:Protocol vs. Struct vs. Class

[英]Swift: Protocol vs. Struct vs. Class

我開始學習Swift語言,並且無法繞過Protocols,Structs和Classes。

我來自Android方面的編程,所以我相信Swift Protocols基本上都是Java接口?

每種方法的適當用例是什么?

這些類比並非“完全”正確,但正如我所理解的那樣,這是它的要點

  1. 是的,協議實際上就像接口一樣

  2. 類是類,如Java / Android,幾乎任何其他語言

  3. 結構類似於類,但是當它們從一個變量/函數傳遞給另一個變量/函數時,它們通過值(復制)傳遞。 如果你完全熟悉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 ,這可以提供很多幫助。

結構的主要用例是當你有很多不可變的“簡單數據”,如Vector(一組3個浮點值)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM