聲明特性只能應(yīng)用于聲明。然而,你也可以將noreturn特性應(yīng)用于函數(shù)或方法類型。
assignment
該特性用于修飾重載了復(fù)合賦值運(yùn)算符的函數(shù)。重載了復(fù)合賦值運(yùn)算符的函數(shù)必需將它們的初始輸入?yún)?shù)標(biāo)記為inout。如何使用assignment特性的一個(gè)例子,請(qǐng)見:復(fù)合賦值運(yùn)算符。
class_protocol
該特性用于修飾一個(gè)協(xié)議表明該協(xié)議只能被類類型采用[待改:adopted]。
如果你用objc特性修飾一個(gè)協(xié)議,class_protocol特性就會(huì)隱式地應(yīng)用到該協(xié)議,因此無需顯式地用class_protocol特性標(biāo)記該協(xié)議。
exported
該特性用于修飾導(dǎo)入聲明,以此來導(dǎo)出已導(dǎo)入的模塊,子模塊,或當(dāng)前模塊的聲明。如果另一個(gè)模塊導(dǎo)入了當(dāng)前模塊,那么那個(gè)模塊可以訪問當(dāng)前模塊的導(dǎo)出項(xiàng)。
final
該特性用于修飾一個(gè)類或類中的屬性,方法,以及下標(biāo)成員。如果用它修飾一個(gè)類,那么這個(gè)類則不能被繼承。如果用它修飾類中的屬性,方法或下標(biāo),則表示在子類中,它們不能被重寫。
lazy
該特性用于修飾類或結(jié)構(gòu)體中的存儲(chǔ)型變量屬性,表示該屬性的初始值最多只被計(jì)算和存儲(chǔ)一次,且發(fā)生在第一次訪問它時(shí)。如何使用lazy特性的一個(gè)例子,請(qǐng)見:惰性存儲(chǔ)型屬性。
noreturn
該特性用于修飾函數(shù)或方法聲明,表明該函數(shù)或方法的對(duì)應(yīng)類型,T,是@noreturn T。你可以用這個(gè)特性修飾函數(shù)或方法的類型,這樣一來,函數(shù)或方法就不會(huì)返回到它的調(diào)用者中去。
對(duì)于一個(gè)沒有用noreturn特性標(biāo)記的函數(shù)或方法,你可以將它重寫(override)為用該特性標(biāo)記的。相反,對(duì)于一個(gè)已經(jīng)用noreturn特性標(biāo)記的函數(shù)或方法,你則不可以將它重寫為沒使用該特性標(biāo)記的。相同的規(guī)則試用于當(dāng)你在一個(gè)comforming類型中實(shí)現(xiàn)一個(gè)協(xié)議方法時(shí)。
NSCopying
該特性用于修飾一個(gè)類的存儲(chǔ)型變量屬性。該特性將使屬性的setter與屬性值的一個(gè)副本合成,由copyWithZone方法返回,而不是屬性本身的值。該屬性的類型必需遵循NSCopying協(xié)議。
NSCopying特性的行為與Objective-C中的copy特性相似。
NSManaged
該特性用于修飾NSManagedObject子類中的存儲(chǔ)型變量屬性,表明屬性的存儲(chǔ)和實(shí)現(xiàn)由Core Data在運(yùn)行時(shí)基于相關(guān)實(shí)體描述動(dòng)態(tài)提供。
objc
該特性用于修飾任意可以在Objective-C中表示的聲明,比如,非嵌套類,協(xié)議,類和協(xié)議中的屬性和方法(包含getter和setter),初始化器,析構(gòu)器,以下下標(biāo)。objc特性告訴編譯器該聲明可以在Objective-C代碼中使用。
如果你將objc特性應(yīng)用于一個(gè)類或協(xié)議,它也會(huì)隱式地應(yīng)用于那個(gè)類或協(xié)議的成員。對(duì)于標(biāo)記了objc特性的類,編譯器會(huì)隱式地為它的子類添加objc特性。標(biāo)記了objc特性的協(xié)議不能繼承自沒有標(biāo)記objc的協(xié)議。
objc特性有一個(gè)可選的參數(shù),由標(biāo)記符組成。當(dāng)你想把objc所修飾的實(shí)體以一個(gè)不同的名字暴露給Objective-C,你就可以使用這個(gè)特性參數(shù)。你可以使用這個(gè)參數(shù)來命名類,協(xié)議,方法,getters,setters,以及初始化器。下面的例子把ExampleClass中enabled屬性的getter暴露給Objective-C,名字是isEnabled,而不是它原來的屬性名。
@objc
class ExampleClass {
var enabled: Bool {
@objc(isEnabled) get {
// Return the appropriate value
}
}
}
optional
用該特性修飾協(xié)議的屬性,方法或下標(biāo)成員,表示實(shí)現(xiàn)這些成員并不需要一致性類型(conforming type)。
你只能用optional特性修飾那些標(biāo)記了objc特性的協(xié)議。因此,只有類類型可以adopt和comform to那些包含可選成員需求的協(xié)議。更多關(guān)于如何使用optional特性以及如何訪問可選協(xié)議成員的指導(dǎo),例如,當(dāng)你不確定一個(gè)conforming類型是否實(shí)現(xiàn)了它們,請(qǐng)見:可選協(xié)議需求。