日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Swift語(yǔ)言那些鮮為人知的特性

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

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),臨滄企業(yè)網(wǎng)站建設(shè),臨滄品牌網(wǎng)站建設(shè),網(wǎng)站定制,臨滄網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,臨滄網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

@inline

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

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

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

@transparent

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

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

@availability

這個(gè)特性可以用來(lái)標(biāo)識(shí)某些函數(shù)只在某些平臺(tái)或版本上可用。***個(gè)參數(shù)是平臺(tái),可以用星號(hào)(*)代表一切可用,還可以是iOS或OS X。因?yàn)槿绻枰槍?duì)不同的平臺(tái),就要指定多個(gè)@availability屬性。

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

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

@noreturn

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

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

@asmname

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

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

@unsafe_no_objc_tagged_pointer

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

@semantics

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

結(jié)論

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

文章來(lái)源:Russ Bishop

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

譯者簡(jiǎn)介:白云鵬,移動(dòng)應(yīng)用開(kāi)發(fā)者,個(gè)人博客:http://baiyunpeng.com。


網(wǎng)站欄目:Swift語(yǔ)言那些鮮為人知的特性
網(wǎng)頁(yè)URL:http://www.5511xx.com/article/dhgeosp.html