位置:首頁 > 高級語言 > Swift教學 > Swift聲明特性

Swift聲明特性

聲明特性

聲明特性隻能應用於聲明。然而,你也可以將noreturn特性應用於函數或方法類型。

assignment

該特性用於修飾重載了複合賦值運算符的函數。重載了複合賦值運算符的函數必需將它們的初始輸入參數標記為inout。如何使用assignment特性的一個例子,請見:複合賦值運算符

class_protocol

該特性用於修飾一個協議表明該協議隻能被類類型采用[待改:adopted]。

如果你用objc特性修飾一個協議,class_protocol特性就會隱式地應用到該協議,因此無需顯式地用class_protocol特性標記該協議。

exported

該特性用於修飾導入聲明,以此來導出已導入的模塊,子模塊,或當前模塊的聲明。如果另一個模塊導入了當前模塊,那麼那個模塊可以訪問當前模塊的導出項。

final

該特性用於修飾一個類或類中的屬性,方法,以及下標成員。如果用它修飾一個類,那麼這個類則不能被繼承。如果用它修飾類中的屬性,方法或下標,則表示在子類中,它們不能被重寫。

lazy

該特性用於修飾類或結構體中的存儲型變量屬性,表示該屬性的初始值最多隻被計算和存儲一次,且發生在第一次訪問它時。如何使用lazy特性的一個例子,請見:惰性存儲型屬性

noreturn

該特性用於修飾函數或方法聲明,表明該函數或方法的對應類型,T,是@noreturn T。你可以用這個特性修飾函數或方法的類型,這樣一來,函數或方法就不會返回到它的調用者中去。

對於一個冇有用noreturn特性標記的函數或方法,你可以將它重寫(override)為用該特性標記的。相反,對於一個已經用noreturn特性標記的函數或方法,你則不可以將它重寫為冇使用該特性標記的。相同的規則試用於當你在一個comforming類型中實現一個協議方法時。

NSCopying

該特性用於修飾一個類的存儲型變量屬性。該特性將使屬性的setter與屬性值的一個副本合成,由copyWithZone方法返回,而不是屬性本身的值。該屬性的類型必需遵循NSCopying協議。

NSCopying特性的行為與Objective-C中的copy特性相似。

NSManaged

該特性用於修飾NSManagedObject子類中的存儲型變量屬性,表明屬性的存儲和實現由Core Data在運行時基於相關實體描述動態提供。

objc

該特性用於修飾任意可以在Objective-C中表示的聲明,比如,非嵌套類,協議,類和協議中的屬性和方法(包含getter和setter),初始化器,析構器,以下下標。objc特性告訴編譯器該聲明可以在Objective-C代碼中使用。

如果你將objc特性應用於一個類或協議,它也會隱式地應用於那個類或協議的成員。對於標記了objc特性的類,編譯器會隱式地為它的子類添加objc特性。標記了objc特性的協議不能繼承自冇有標記objc的協議。

objc特性有一個可選的參數,由標記符組成。當你想把objc所修飾的實體以一個不同的名字暴露給Objective-C,你就可以使用這個特性參數。你可以使用這個參數來命名類,協議,方法,getters,setters,以及初始化器。下麵的例子把ExampleClassenabled屬性的getter暴露給Objective-C,名字是isEnabled,而不是它原來的屬性名。

@objc
class ExampleClass {
    var enabled: Bool {
    @objc(isEnabled) get {
        // Return the appropriate value
    }
    }
}

optional

用該特性修飾協議的屬性,方法或下標成員,表示實現這些成員並不需要一致性類型(conforming type)。

你隻能用optional特性修飾那些標記了objc特性的協議。因此,隻有類類型可以adopt和comform to那些包含可選成員需求的協議。更多關於如何使用optional特性以及如何訪問可選協議成員的指導,例如,當你不確定一個conforming類型是否實現了它們,請見:可選協議需求

required

用該特性修飾一個類的指定或便利初始化器,表示該類的所有子類都必需實現該初始化器。

加了該特性的指定初始化器必需顯式地實現,而便利初始化器既可顯式地實現,也可以在子類實現了超類所有指定初始化器後繼承而來(或者當子類使用便利初始化器重寫了指定初始化器)。

Interface Builder使用的聲明特性

Interface Builder特性是Interface Builder用來與Xcode同步的聲明特性。Swift提供了以下的Interface Builder特性:IBActionIBDesignableIBInspectable,以及IBOutlet。這些特性與Objective-C中對應的特性在概念上是相同的。

IBOutletIBInspectable用於修飾一個類的屬性聲明;IBAction特性用於修飾一個類的方法聲明;IBDesignable用於修飾類的聲明。