Swift語言的特性

Swift語言有各類各樣缺少(或沒有)文檔記錄的特性(attribute)放在那裏等着被使用面試

iOS開發交流技術羣:563513413,無論你是大牛仍是小白都歡迎入駐 ,分享BAT,阿里面試題、面試經驗,討論技術, 你們一塊兒交流學習成長!數組

inline

這個特性爲編譯器提供了內聯提示。有效的取值是__always和never。除非我認爲必需要用這兩個值,不然就不會使用它(特別是__always)。到目前爲止與其相關的規則還不是很明確,在有限的測試下,它能夠正常地工做,但還要視具體狀況而定。函數

進一步的解釋:儘管底層虛擬機(Low Level Virtual Machine, LLVM)有強制內聯的概念,但咱們目前還不知道這個inline特性是否與其直接映射,也不知道是否存在大小方面的限制,但這將會致使編譯器忽略這一點而跳過內聯。理論上說應該是這樣的,但我不保證必定是。學習

注意:當優化設置關閉時在調試模式下的構建將忽略inline。測試

transparent

我最初並未將這個特性列出來。該特性會致使編譯器在管道(pipeline)中更早地將函數內聯。它用於[「像+(Int, Int)這樣很是原始的函數」,而「不該該用於獨立函數」]優化

甚至在沒有優化設置的調試模式下transparent特性函數就會被內聯,因此在調用「1+1」這樣的函數的時候並不會特別慢。另外這個特性與inline(__always)很是相似。spa

availability

這個特性能夠用來標識某些函數只在某些平臺或版本上可用。第一個參數是平臺,能夠用星號(*)表明一切可用,還能夠是iOS或OS X。由於若是須要針對不一樣的平臺,就要指定多個availability屬性。調試

若是須要表示該函數在某個給定的平臺徹底不可用時,能夠將第二個參數置爲unavailable。此外,還能夠用introduced,deprecated和obsoleted來指定一個或是多個版本的組合:obsoleted意味着該項已經刪除,deprecated僅僅表示若是使用就會給予警告。最後你能夠設置message的值,若是該項被使用了就由編譯器輸出。code

noreturn

正如該特性所描述的那樣:編譯器能夠假定這個函數是一個永遠循環運行的起點,例如while true { },或者假定是函數abort或者exit進程的狀況。進程

評論者Marco Masser指出,若是調用另外一個被標誌爲noreturn的函數,那麼編譯器會忽略掉當前函數中缺失的返回值(missing return values),由於編譯器理解程序的控制流。

asmname

該屬性給出了函數、方法或屬性實現的符號名稱。若是你已經知道對應的函數參數及其類型,那麼就能夠直接調用Swift的內部標準庫函數,甚至不用頭文件,也能夠方便地調用C語言編寫的函數:
Java代碼

asmname("function") func f()

unsafe_no_objc_tagged_pointer

上面這個仍然是個謎,但我猜想它是在告訴Swift與Objective-C聯繫的時候不要使用tagged pointer。

semantics

參數看起來像是array.mutate_unknown或array.init這樣的字符串數組。想必這是要告訴編譯器(或靜態分析器)函數是如何工做的。

相關文章
相關標籤/搜索