春節(jié)期間,蘋果發(fā)布了版本號為6D532l的Xcode 6.3 Beta 2,相較上一版本,此次共有16處改動,而幾經(jīng)修改的Swift語言即使已更新至1.2版本,其語法依然不穩(wěn)定。除此之外,Xcode還有一個非常大的變化就是全新的Playground。
App Store和Test Flight Crash Logs Oganizer
- Xcode現(xiàn)在可以顯示從AppStore和TestFlight收集來的崩潰日志,為了查看你自己App的崩潰日志,先需要你在Xcode的賬戶面板輸入你的開發(fā)者賬號,最后在Xcode Organizer窗口中查看與你開發(fā)者賬號相關(guān)聯(lián)的iOS App崩潰報告。
- 崩潰報告只在你向iTunes Connect中上傳了當前App的符號信息數(shù)據(jù)的情況下可見。Xcode提供一個列表來顯示你所有App中級別最高的崩潰報告,并且崩潰報是符號化的且和Apple的服務(wù)器整合。Xcode同時提供了工作流來管理你的崩潰報告以及直接回溯到你的App源代碼。
Xcode Playground增強
- Playgrounds提供了一個簡單的方法通過標記文本來創(chuàng)建和編輯富文檔。使用新的"//:"和“/*:*/”風格的備注來顯示豐富的備注信息??梢酝ㄟ^使用編輯菜單中的“Show Documentation as Rich Text”和“Show Documentation as Raw Text”選項來切換Playground的顯示模式。
- Playgrounds的結(jié)果現(xiàn)在以內(nèi)聯(lián)的方式顯示而不是顯示在Timeline視圖中,如果顯示結(jié)果有多行時,你可以在單行與多行列表中切換。對于結(jié)果集是數(shù)字的,Xcode提供了一個圖形化的顯示選項,結(jié)果顯示可以被調(diào)整顯示多還是少。
- Playground滾動和性能都有所提高。
Swift性能
- 一個被稱為“全模塊優(yōu)化”的編譯模式增加到了Swift中。這個選項可以把一個Target中的所有文件優(yōu)化到一起同時提供更好性能。這個新的標志可以通過Xcode中的“Whole Module Optimization”編譯選項開啟,或者在使用swiftc命令時傳入“-whole-module-optimization”參數(shù)開啟。
Swift語言的增強
- 這個“if-let”語法現(xiàn)在擴展支持以一個bool表達式開頭并且跟隨一個可選綁定“l(fā)et”表達式。如:
if someValue > 42 && someOtherThing < 19,
let a = getOptionalThing() where a > someValue {
}
- 這個@autoclosure屬性擁有了第二種形式。@autoclosure(escaping) 和@autoclosure有著同樣的調(diào)用形式,但是它允許產(chǎn)生結(jié)果的閉包在實現(xiàn)中緩存,如:
func lazyAssertion(@autoclosure(escaping) condition: () -> Bool,
message: String = "") {
lazyAssertions.append(condition) // escapes
}
lazyAssertion(1 == 2, message: "fail eventually")
Swift語言的改變
- 空合運算符(??)的優(yōu)先級現(xiàn)在比邏輯運算符和比較運算符高,但是比轉(zhuǎn)換運算符as和區(qū)間運算符低。這個提供了非常有用的特性,如:
if allowEmpty || items?.count ?? 0 > 0 {
- “&/”和“&%”運算被移除,這種行為分別使用“/”和“%”代替,不過這種形式已經(jīng)冗余了。
- 從一個ASCII碼構(gòu)造一個UInt8需要一個ascii關(guān)鍵字。使用一個非ASCII的Unicode字符集將產(chǎn)生一個中斷。
- C類型的size_t現(xiàn)在以Int的形式導(dǎo)入到了Swift中,這減少了大量Int和UInt間的顯式類型轉(zhuǎn)換,同時和返回Int型的sizeof更好的對齊。
- 沒有繼承自NSObject的類但是確實繼承了一個@objc標志的協(xié)議時,則需要給這些方法,屬性和構(gòu)造器用@objc標記從而來滿足協(xié)議需求。如:
@objc protocol SomethingDelegate {
func didSomething()
}
class MySomethingDelegate : SomethingDelegate {
@objc func didSomething() { … }
}
作者簡介:
王芳杰 老碼團隊(@未來眼之老碼團隊)成員,目前就職于疊拓信息技術(shù)有限公司,擔任疊拓NGN中國人力資源培養(yǎng)經(jīng)理、疊拓NGN中國售前經(jīng)理,《老碼說編程之玩轉(zhuǎn)Swift江湖》一書作者。