ios Swift 特性

來源:互聯網
上載者:User

標籤:des   class   code   http   com   get   

特性提供了關於聲明和類型的更多資訊。在Swift中有兩類特性,用於修飾聲明的以及用於修飾類型的。例如,required特性,當應用於一個類的指定或便利初始化器聲明時,表明它的每個子類都必須實現那個初始化器。再比如noreturn特性,當應用於函數或方法類型時,表明該函數或方法不會返回到它的調用者。

通過以下方式指定一個特性:符號@後面跟特性名,如果包含參數,則把參數帶上:

@attribute name
@attribute name(attribute arguments)

有些聲明特性通過接收參數來指定特性的更多資訊以及它是如何修飾一個特定的聲明的。這些特性的參數寫在小括弧內,它們的格式由它們所屬的特性來定義。

聲明特性

聲明特性只能應用於聲明。然而,你也可以將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,而不是它原來的屬性名稱。

@objcclass 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用於修飾類的聲明。

類型特性

類型特性只能用於修飾類型。然而,你也可以用noreturn特性去修飾函數或方法聲明。

auto_closure

這個特性通過自動地將運算式封閉到一個無參數閉包中來延遲運算式的求值。使用該特性修飾無參的函數或方法類型,返回運算式的類型。一個如何使用auto_closure特性的例子,見函數類型

noreturn

該特性用於修飾函數或方法的類型,表明該函數或方法不會返回到它的調用者中去。你也可以用它標記函數或方法的聲明,表示函數或方法的相應類型,T,是@noreturn T

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.