//構造方法
init() //構造函數(shù)
init?() //可失敗的構造函數(shù)
init!() //
//通用泛型
id Anyobject
//屬性相關
(setter==)(getter==)在swift中被忽略
nullable ?
nonull
未標記 !
//閉包
swift中的閉包默認捕獲變量的方式相當于oc中block標記__block方式
//類相關
不能在swift中繼承oc的類
如果在swift中遇到oc中不支持的命名可以用@objc(name)為屬性、枚舉、方法、、起個別名
@nonobjc用來標記oc中不支持
dynamic將屬性或者方法標記為dynamic就是告訴編譯器把它當做oc里的屬性或者方法來使用(runtime)
#keyPath(class.property) == "property"
@IBDesignable
@IBInspectable
@NSCopying
coreData @NSManaged
as
String.Index and Range
NS_SWIFT_NOTHROW 將不會使用swift的異常拋出機制
is isKindOfClass
CF_SWIFT_NAME這個宏可以將c中的屬性或者函數(shù)轉換為swift
Color ColorCreateWithCMYK(float c, float m, float y, float k) CF_SWIFT_NAME(Color.init(c:m:y:k:));
如果使用了NS_ENUM 在swift中被處理為對應的枚舉,沒有NS_ENUM會翻譯成為結構體
NS_OPTIONS修飾的枚舉,在swift中是OptionSet類型結構體。
將oc的方法或使用 NS_SWIFT_UNAVAILABLE()可以讓他在swift中不可用
將oc的方法或者屬性使用NS_SWIFT_NAME()可以為他們在swift中命一個別名
// return:返回aString的索引,如果未找到的話則返回 NSNotFound // 注:NSNotFound在Objective-C中定義為NSIntegerMax,我們在期望此方法在Swift中調用能返回nil 重定義Objective-C接口
- (NSUInteger)indexOfString:(NSString *)aString NS_REFINED_FOR_SWIFT;
@available()屬性聲明來指定可用性信息。例如:
@available(iOS8.0,OSX10.10,*)
funcstartUserActivity()->NSUserActivity{
...
}
@INLINE
這個屬性提供編譯器內聯(lián)提示。有效的值為 __always
和 never
。除非我非常確定需要,否者我不會使用這個(特別是 __always
)。關于它的使用方式還不是很清楚。在一些有限的測試中它還能生效,但不同測試環(huán)境效果也可能不同。
修改:進一步解釋,盡管 LLVM 有強制內聯(lián)的概念,但我們現(xiàn)在并不清楚這個屬性是否與其直接關聯(lián)。我們也不清楚是否有大小限制導致編譯器忽略它,跳過內聯(lián)。理論上它本應該有這個行為,但是我不敢保證它有。
記住 @inline
屬性在 debug 編譯下會被忽略(當 optimization 被關閉)。
(譯者注:關于 optimization 可以看[這篇文章](http://ios.jobbole.com/81937/))
@TRANSPARENT
我原本不把這個列入清單。它會使編譯器更早地在構建流程中進行內聯(lián)函數(shù)。它的作用是使[“像(Int, Int)這種非常簡單的函數(shù)”不應該是一個獨立的函數(shù)”](https://devforums.apple.com/message/988972#988972)
@transparent
函數(shù)是內聯(lián)的,即使是在沒有 optimization 的 debug 模式下, 所以像 1 + 1
這種簡單函數(shù)也可以調用運行很快. 否則它的作用就像是 @inline(__always)
.
@AVAILABILITY
這個屬性標記那些只在某些特定版本或平臺上有效的對象。第一個參數(shù)是平臺??梢允?
(所有)、iOS
或 OSX
。如果需要針對多個不同平臺,可以指定多個 @availability
屬性。
第二個參數(shù)可以是 unavailable
,表明對于給定的平臺不可用。相對地,你可以聲明一個或多個版本的組合:introduced
, deprecated
, 和 obsoleted
。Obsoleted 意味著已被移除,deprecated 表示如果使用就會給出警告。最后一個參數(shù)你可以添加 message
,當被使用的時候,編譯器會輸出這些提示。一些例子:
@availability(*, unavailable)
func foo() {}
@availability(iOS, unavailable, message="you can't call this")
func foo2() {}
@availability(OSX, introduced=10.4, deprecated=10.6, obsoleted=10.10)
@availability(iOS, introduced=5.0, deprecated=7.0)
func foo3() {}
@asmname
該屬性給出了函數(shù)、方法或屬性實現(xiàn)的符號名稱。如果你已經(jīng)知道對應的函數(shù)參數(shù)及其類型,那么就可以直接調用Swift的內部標準庫函數(shù),甚至不用頭文件,也可以方便地調用C語言編寫的函數(shù):
[cpp] view plaincopy在CODE上查看代碼片派生到我的代碼片
@asmname("function") func f()
@unsafe_no_objc_tagged_pointer
上面這個仍然是個謎,但我猜測它是在告訴Swift與Objective-C聯(lián)系的時候不要使用tagged pointer。
@semantics
這又是另一個謎。參數(shù)看起來像是array.mutate_unknown或array.init這樣的字符串數(shù)組。想必這是要告訴編譯器(或靜態(tài)分析器)函數(shù)是如何工作的。
@autoclosure 關鍵字,是 Swift 引入的一個便捷操作,旨在讓我們使用閉包作為參數(shù)的時候,更加的方便,簡化語法形式,我們就來看看如何使用吧。
@warn_unused_result 函數(shù)返回值
warn_unused_result你可以為方法添加這個屬性,這樣當你對函數(shù)不正確調用,或者調用該方法卻沒有使用它的結果時,就會獲得提醒。message 參數(shù)用來提供當你調用方法卻沒使用結果時編譯器給出的警告。
mutable_varient 用來提供你所使用的non mutating 方法的mutating 版本方法的名字。比如,Swift標準庫里面提供mutating 方法SortInPlace() 和 non mutating方法 sort() 如果你調用sort() 但卻并沒有用到它的結果,編譯器就會猜測你想用的是SortInPlace()。
Swift關鍵字
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關閱讀更多精彩內容
- 關鍵字inout:當我們需要通過一個函數(shù)來改變函數(shù)外面變量的值(以引用方式傳遞)。通俗的講:就是使用inout關鍵...
- class關鍵字除了有自定義類的作用, 還有聲明類方法的作用. 資料鏈接: 1、 方法–類型方法 2、繼承–防止重...