簡體   English   中英

在Swift中區分結構和類

[英]Differentiating Between a Struct and a Class in Swift

我知道為什么要使用結構而不是類,但是如何最好地判斷正在使用的API使用的是哪個?

顯然,查看頭文件(或希望的文檔)應該使它立即顯而易見。 我想知道是否有一種方法可以知道我使用的對象是否是基於面值的結構或類?

您不能從其他結構或類型繼承。 類具有從父類繼承函數,變量和常量的能力。

快速結構是值類型,而類是引用類型。 使用值類型可以減少代碼的出錯率。

復制引用類型變量時,兩個變量都引用內存中的同一對象。 更改其中一個變量將更改另一個變量。

當您復制值類型變量時,完整變量將被復制到內存中的新位置。 更改其中一個副本不會更改另一個副本。 如果復制對象很便宜,那么進行復制比共享內存要安全得多。

Xcode中的自動完成功能知道類型的類型:

截圖

我不確定“面值”是什么意思。 您可以通過使用reflect獲取對象的MirrorType並檢查MirrorTypeobjectIdentifier屬性來測試對象是否為類的實例,如下所示:

struct TestStruct { }
class TestClass { }

let testStruct = TestStruct()
let testClass = TestClass()

if let x = reflect(testStruct).objectIdentifier {
    println("I am a class...")
} else {
    println("I am not a class...")    // prints "I am not a class..."
}

if let x = reflect(testClass).objectIdentifier {
    println("I am a class...")        // prints "I am a class..."
} else {
    println("I am not a class...")
}

即將推出的Swift 1.2版本(我沒有新的xCode beta版,所以我不能肯定地說)可能不合時宜,據我所知,它具有更好的對象自省功能,但這確實可以解決問題。

暫無
暫無

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

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