當我寫var x = 0
如何的整數存儲文字(例如無功X = 0)
我知道x
是具有屬性和方法(從int結構創建的)的對象。
x在哪裏以及如何存儲0?
0是否存儲爲屬性的x?
如果是,那麼該屬性的類型是什麼?
如果不是,它存儲在哪裏?
當我寫var x = 0
如何的整數存儲文字(例如無功X = 0)
我知道x
是具有屬性和方法(從int結構創建的)的對象。
x在哪裏以及如何存儲0?
0是否存儲爲屬性的x?
如果是,那麼該屬性的類型是什麼?
如果不是,它存儲在哪裏?
x
嚴格來說不是一個對象。 「對象」是我們給實例的一個名稱,而不是結構的名稱。 x
是Int
結構的實例。
Int
結構包裝一個Builtin
整數類型,並定義了一堆方法,你可以調用它。內置的整數文字類型不能從Swift訪問(也沒有理由)。像所有結構一樣,Int
的實例存儲在運行時堆棧中。例如,它們不是堆中的對象,例如Java中的Integer
。你可以看到implementation details of (U)Int(8/16/32/64)
here。該文件使用由Swift團隊創建的Generate Your Boilerplate(GYB)預處理器從.swift.gyb
模板文件生成.swift
文件。 在line 221,你可以看到Builtin.${BuiltinName}
類型的屬性_value
。該預處理器GYB擴展了這一點,以便具有Int
Builtin.Int
類型的_value
,Int64
具有Built.Int64
等
'Int'符合['IntegerLiteralConvertible'](http://nshipster.com/swift-literal-convertible/ ),因此編譯器知道如何將一個固定值(如0)轉換爲一個Int結構體 –