1 回答

TA貢獻1829條經驗 獲得超7個贊
Swift 2.0和Objective-C的更新
錯誤處理:我們可以在Swift中構建一個函數用來拋出,捕獲和管理錯誤。我們可以接觸和處理可恢復的錯誤,如“file-not-found”或者網絡超時,Swift和錯誤處理可以和NSError無縫交互。
可用性檢查:如果你在一個舊的部署平臺上調用的一個新的系統版本引入的API時將觸發一個編譯時錯誤。我們可以在if或者guard條件語句中使用#available()函數來檢查API函數的可用性:例如:
if#available(iOS8.0,OSX10.10,*){
//當版本匹配時使用HandoffAPIs.
letactivity=
NSUserActivity(activityType:"com.example.ShoppingList.view")
activity.becomeCurrent()
}else{
//當版本不匹配時返回.
}
你可以在你的代碼聲明中使用@available()屬性聲明來指定可用性信息。例如:
@available(iOS8.0,OSX10.10,*)
funcstartUserActivity()->NSUserActivity{
...
}
指示startUserActivity()方法只在iOS8.0+,OSX10.10+以及以其他平臺的全版本可用。
協議的擴展性:現在可以為協議類型編寫擴展,這樣就可以為遵循該協議的任意類增加方法或者屬性,極大重用我們的代碼。
協議默認實現:現在可以為協議擴展中指定的需求提供一個默認實現,這樣便可以使用諸如“mixin”和“trait”的模式。
新的defer語句:這個語句在代碼生命周期結束時用來做清理的工作,該特性在并發開發時使用新的錯誤處理模型時非常有用。例如:
letf=fopen("x.txt","r")
defer{fclose(f)}
tryfoo(f)//f會關閉如果錯誤產生的話.
letf2=fopen("y.txt","r")
defer{fclose(f2)}
trybar(f,f2)//如果錯誤產生f2關閉,接著f關閉。
}//f2關閉,如果沒有任何錯誤產生f關閉。
新的guard語法:這個新的語法允許你在一個代碼周期中構建一個提前的退出點。例如:
guardletz=bar()else{return}
這里的else語句被用于退出代碼塊(和return、throw、break、continue等類似),或者終止調用一個@noreturn屬性修飾的函數。
增強化的模式匹配:switch/case的模式匹配現在在很多新的條件流程控制語句中可用,這包括if/case,while/case,guard/case和for-in/case、for/in,同時也允許使用“where”判斷。
新的do語句:在do語句中支持代碼塊嵌套,例如:
do{
//newscope
do{
//anotherscope
}
}
可測試性:關于Swift2.0框架和App的測試現在不需要將內部功能代碼路由到public代碼了。在待測試代碼中使用@testable import {ModuleName}語法使所有的內部私有和public出來的代碼可用。App或者framework的target在編譯時需要啟用“Enable Testability”編譯設置。這個“Enable Testability”編譯屬性只能在Debug配置中可用,因為它需要導出內部符號信息從而妨礙代碼優化。
對C函數指針的支持:以函數指針作為函數參數的C函數將會使用閉包或者全局的函數的方式調用,由于這個限制,所以閉包不能捕獲其上下文環境。例如,標準C庫函數qsort將會按照如下方式調用:
vararray=[3,14,15,9,2,6,5]
qsort(&array,array.count,sizeofValue(array[0])){a,bin
returnInt32(UnsafePointer<Int>(a).memory-UnsafePointer<Int>(b).memory)
}
print(array)
增強的診斷信息:增加了一個新的警告信息用來在盡可能的情況下鼓勵使用let而不是var。同時也增加了新的警告信息來提示未使用的變量,無法觸發的switch case分支判斷等,同時對于switch語句耗盡的判斷更加智能。
SIMD支持:Clang中擴展的矩陣算法在swift中可以導入并使用了,大數據量的圖形算法或者其他系統級別的數據運算在Swift實現成為可能。
枚舉中現在支持多泛型關聯值,例如:
enumEither<T,U>{
caseLeft(T),Right(U)
}
打印特定枚舉類型值時現在可以顯示枚舉值和附帶的值了,但是這個對于@objc類型的枚舉類型或者含有多附帶值的枚舉類型不支持。
現在允許對泛型類型編寫公共擴展(Public)了。例如:
publicextensionArray{…}
非泛型的類可以繼承自泛型的類了。
Swift字符串字面量的拼接,包括跨行文本,現在確保能夠進行編譯時優化。
可失敗便捷構造器現在允許在調用self.init前調用return nil語句。指定構造器在返回nil之前必須初始化所有的存儲屬性,這是一個已知的限制。
內嵌函數現在可以遞歸引用函數本身或者其他的內嵌函數。
if條件語句現在支持標簽化了,可以使用break去跳出一個標簽化的if判斷。注意不帶標簽的break語句只能使用在循環或者switch/case語句中而不能用在if中。
一個新的x?語句用來匹配可選類型。
一個新的@nonobjc屬性用來選擇性的禁止實例的導出,這個和@objc相對應。
在標準庫中增加了一個新的函數:readLine()
- 1 回答
- 0 關注
- 1035 瀏覽
添加回答
舉報