swift 宣告特性 型別特性

2021-06-22 11:17:41 字數 4106 閱讀 9977

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

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

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

宣告特性

宣告特性只能應用於宣告。然而,你也可以將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,以及初始化器。下面的例子把exampleclass中enabled屬性的getter暴露給objective-c,名字是isenabled,而不是它原來的屬性名。

@objc 

class

exampleclass  

} } 

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

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

required

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

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

inte***ce builder使用的宣告特性

inte***ce builder特性是inte***ce builder用來與xcode同步的宣告特性。swift提供了以下的inte***ce builder特性:ibaction,ibdesignable,ibinspectable,以及iboutlet。這些特性與objective-c中對應的特性在概念上是相同的。

iboutlet和ibinspectable用於修飾乙個類的屬性宣告;ibaction特性用於修飾乙個類的方法宣告;ibdesignable用於修飾類的宣告。

型別特性

型別特性只能用於修飾型別。然而,你也可以用noreturn特性去修飾函式或方法宣告。

auto_closure

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

noreturn

該特性用於修飾函式或方法的型別,表明該函式或方法不會返回到它的呼叫者中去。你也可以用它標記函式或方法的宣告,表示函式或方法的相應型別,t,是@noreturn t。

特性的語法:

attribute

­

­opt­

attribute-name→­

attribute-argument-clause

­

opt­

attributes→­

­opt­

balanced-tokens→­

­opt­

balanced-token

­

opt­

balanced-token

­

opt­

balanced-token

­

balanced-token

→any identifier, keyword, literal, or operator

balanced-token

→any punctuation except

,

,

,

,

­

react特性 宣告式程式設計

網路上有很多關於宣告式程式設計和命令式程式設計的對比和說明,但是大多都是大同小異,總的來說就是一句話 告訴電腦我要做什麼,但是讓電腦自己決定怎麼做.1.命令式程式設計.這種程式設計模式比較常見,也是我們比較好理解的方式.它把完成某個需求的每一步都充分展示出來了,一步一步地指揮計算機做事情.var a...

swift新特性( nullable和

在swift中,可以使用 和?來表示乙個物件是optional的還是non optional,如view?和view 而在objective c中則沒有這一區分,view即可表示這個物件是optional,也可表示是non optioanl。這樣就會造成乙個問題 在swift與objective c...

PHP 陣列部分 宣告的特性

陣列的定義 把若干變數有序的的形式組織起來的一種形式。這些資料元素的集合稱為陣列 陣列 分為一維陣列 二維陣列 二維以上的就是多維陣列。陣列是乙個容器,使用的目的是可以批量操作。陣列的分類 索引陣列 和關聯陣列 索引 是從0開始的 關聯陣列以字串作為索引值,索引陣列更像操作表。索引值為列名,用於訪問...