偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Swift語言那些鮮為人知的特性

開發(fā) 開發(fā)工具
Swift語言中存在著各種各樣缺乏或沒有文檔記錄的特性等著被開發(fā)者使用,盡管鮮為人知但卻非常有用,本文作者對其中的一些特性進行了介紹。

Swift語言有各種各樣缺乏(或沒有)文檔記錄的特性(attribute)放在那里等著被使用。讓我們一起看看其中的一些特性:

 Swift語言那些鮮為人知的特性

@inline

這個特性為編譯器提供了內(nèi)聯(lián)提示。有效的取值是__always和never。除非我認為必須要用這兩個值,否則就不會使用它(特別是__always)。到目前為止與其相關(guān)的規(guī)則還不是很明確,在有限的測試下,它可以正常地工作,但還要視具體情況而定。

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

注意(當(dāng)優(yōu)化設(shè)置關(guān)閉時)在調(diào)試模式下的構(gòu)建將忽略@inline。

@transparent

我最初并未將這個特性列出來。該特性會導(dǎo)致編譯器在管道(pipeline)中更早地將函數(shù)內(nèi)聯(lián)。它用于“像+(Int, Int)這樣非常原始的函數(shù)”,而“不應(yīng)該用于獨立函數(shù)”。

甚至在沒有優(yōu)化設(shè)置的調(diào)試模式下@transparent特性函數(shù)就會被內(nèi)聯(lián),所以在調(diào)用“1+1”這樣的函數(shù)的時候并不會特別慢。另外這個特性與@inline(__always)非常類似。

@availability

這個特性可以用來標(biāo)識某些函數(shù)只在某些平臺或版本上可用。***個參數(shù)是平臺,可以用星號(*)代表一切可用,還可以是iOS或OS X。因為如果需要針對不同的平臺,就要指定多個@availability屬性。

如 果需要表示該函數(shù)在某個給定的平臺完全不可用時,可以將第二個參數(shù)置為unavailable。此外,還可以用 introduced,deprecated和obsoleted來指定一個或是多個版本的組合:obsoleted意味著該項已經(jīng)刪 除,deprecated僅僅表示如果使用就會給予警告。***你可以設(shè)置message的值,如果該項被使用了就由編譯器輸出。下面是一些例子:

  1. @availability(*, unavailable) 
  2. func foo() {} 
  3.  
  4. @availability(iOS, unavailable, message="you can't call this"
  5. func foo2() {} 
  6.  
  7. @availability(OSX, introduced=10.4, deprecated=10.6, obsoleted=10.10
  8. @availability(iOS, introduced=5.0, deprecated=7.0
  9. func foo3() {} 

@noreturn

正如該特性所描述的那樣:編譯器可以假定這個函數(shù)是一個永遠循環(huán)運行的起點,例如while true { },或者假定是函數(shù)abort或者exit進程的情況。

評論者Marco Masser指出,如果調(diào)用另一個被標(biāo)志為@noreturn的函數(shù),那么編譯器會忽略掉當(dāng)前函數(shù)中缺失的返回值(missing return values),因為編譯器理解程序的控制流。

@asmname

該屬性給出了函數(shù)、方法或?qū)傩詫崿F(xiàn)的符號名稱。如果你已經(jīng)知道對應(yīng)的函數(shù)參數(shù)及其類型,那么就可以直接調(diào)用Swift的內(nèi)部標(biāo)準(zhǔn)庫函數(shù),甚至不用頭文件,也可以方便地調(diào)用C語言編寫的函數(shù):

  1. @asmname("function") func f() 

@unsafe_no_objc_tagged_pointer

上面這個仍然是個謎,但我猜測它是在告訴Swift與Objective-C聯(lián)系的時候不要使用tagged pointer。

@semantics

這又是另一個謎。參數(shù)看起來像是array.mutate_unknown或array.init這樣的字符串?dāng)?shù)組。想必這是要告訴編譯器(或靜態(tài)分析器)函數(shù)是如何工作的。

結(jié)論

誰還需要乏味老套的@objc和@autoclosure呢?還是算了吧!

文章來源:Russ Bishop

作者簡介:Russ Bishop 全能型程序員,使用C#、Objective-C和Swift語言編程,開發(fā)了奇特的應(yīng)用Storm Sim Free,博客:http://www.russbishop.net/。

譯者簡介:白云鵬,移動應(yīng)用開發(fā)者,個人博客:http://baiyunpeng.com。

責(zé)任編輯:王雪燕 來源: Russ Bishop
相關(guān)推薦

2020-06-05 14:11:21

Swift運算符代碼

2024-04-30 08:32:18

CSS元素網(wǎng)格

2023-12-06 08:46:20

CSSFlex內(nèi)幕

2010-03-23 16:53:19

Visual Stud

2024-07-08 08:31:56

2022-11-30 16:31:48

CSS開發(fā)瀏覽器

2024-05-07 00:00:00

工具類開發(fā)者功能

2010-01-07 10:05:51

IT顧問特質(zhì)

2024-09-26 16:28:42

Pythonif代碼

2021-05-10 08:05:13

Linux內(nèi)核頁表

2025-01-26 10:35:42

Go語言類型

2011-05-04 11:16:50

打印語言

2011-05-03 13:13:52

編程PHPJava

2011-07-29 11:13:42

2014-04-22 16:38:12

GitHubGitHub 使用技巧

2012-11-22 13:02:53

2015-03-04 09:30:34

數(shù)據(jù)庫

2014-05-30 16:31:30

2009-09-14 09:45:20

Chrome谷歌操作系統(tǒng)

2023-04-23 15:11:26

點贊
收藏

51CTO技術(shù)棧公眾號