盤點開發者最喜愛的Swift技巧
摘要:Swift發布才半年左右,卻已深得眾多開發者的青睞,也有了許多學習資源、項目和開發工具。在本文中,來自objc.io、LinkedIn等各個公司的軟件工程師及資深開發者總結了自己在接觸Swift過程中最喜愛的貼士與技巧。
屈指算來,Swift語言才發布半年左右,卻已深得眾多開發者的青睞,也有了許許多多的學習資源、項目和工具。在本文中,來自objc.io、LinkedIn等各個公司的軟件工程師及資深開發者總結了自己在接觸Swift過程中最喜愛的貼士與技巧,有些技巧即使是很早就入坑Swift的開發者都不知道,不妨一起來了解一下吧。
Natasha Murashev——Capital One iOS工程師、Natasha The Robot博主
當我在構建iOS應用時,Swift能夠允許更多的函數式編程方法,所以,為了能在改善Swift代碼時做出更好的決策,我一直在學習函數式編程。迄今為止,我最喜歡的函數方面的Swift資源有:
- 功能型函數——能輕松更改函數,讓代碼更獨立、可測試。
- 包裝類型——我喜歡用可讀且安全的類型別名來編寫代碼。
- 類型設計——在設計程序時大幅使用正確的類型,有利于編譯器調試。
- Swift中柯里化函數的運用——在Haskell中,某種類型的函數指針只能指向特定參數類型和數目以及返回值類型的函數,而Swift則允許“currying”或部分應用函數,從而實現代碼塊可重復使用。
- Swift奇妙的差錯處理——與Objective-C相比,我特別喜歡這種簡單、可讀性強而又安全的錯誤處理方式。
- 面向對象編程直達車——它為在代碼中進行錯誤處理提供了一種最快捷的方式,于程序猿而言,最幸福之事莫過于此。
- Swift函數式編程——這是一本關于Swift函數比較深度的書籍,我每次重新讀過時都會發現不一樣的點,非常適合想要深入研究Swift函數以及如何將其運用到iOS代碼中的開發者們閱讀。
</ul>
Chris Eidhof——objc.io創始人、《Swift函數式編程》作者
快速排序(Quicksort)——Swift中的快速排序實現可以說是前無古人后無來者,大多數Quicksort實現都需使用固定的內存,而Swift則能以最簡潔清晰的程序實現快排:
func qsort(input: [Int]) -> [Int] { if let (pivot, rest) = input.decompose { let lesser = rest.filter { $0 < pivot } let greater = rest.filter { $0 >= pivot } return qsort(lesser) + [pivot] + qsort(greater) } else { return [] } }
Austin Zheng——LinkedIn高級軟件工程師
我認為,精妙的Swift技巧應當如此:開發者可以通過創建一個已定義標準類的閉包來為匿名類實例設置委托,而閉包則將返回該類的一個新實例,并運行。示例代碼如下:
import Foundation protocol SomeDelegateProtocol : class { func firstFunc() -> String func secondFunc() -> Bool } class MyClass { weak var delegate : SomeDelegateProtocol? } class Parent { var child : MyClass var strongDelegate : SomeDelegateProtocol? = nil func setup() { strongDelegate = { // [self] // Original version had this not commented; it's commented to let people know it was a typo class SomethingClass : SomeDelegateProtocol { func firstFunc() -> String { return "foo" } func secondFunc() -> Bool { return true } } return SomethingClass() }() child.delegate = strongDelegate } init() { self.child = MyClass() self.setup() } } var bleh = Parent() var result = bleh.child.delegate?.firstFunc() println("Got \(result!)")
Clay Smith——PagerDuty高級軟件工程師
下面是我在處理所有Xcode問題(尤其是sourcekit)時所使用的最基本的Bash alias(命令別名),用來刪除Xcode中的Derived Data:
alias sourcekitsad='rm -rf ~/Library/Developer/Xcode/DerivedData'
Michael Helmbrecht——Motiv UX設計師兼iOS開發者
于我而言,最喜歡的一點應該是Swift能在String類型和NSString類型中自動轉換,當無法打印String時,通過直接調用NSString的-description方法即可實現。
David Kobilnyk——ShopRunner軟件工程師
作為一門編程語言,我覺得Swift還不夠優雅,而我也并沒有發現什么太特別的技巧,只是很喜歡原始類型、枚舉一起使用,就像這樣:
public enum ReminderTimeType: String { case Evening = "this evening" case Tomorrow = "tomorrow" case Weekend = "this weekend" case NextWeek = "next week" case CoupleWeeks = "in a couple weeks" case CoupleMonths = "in a couple months" case Someday = "someday" public static let array = [ Evening, Tomorrow, Weekend, NextWeek, CoupleWeeks, CoupleMonths, Someday ] public static let rawArray = array.map { $0.rawValue } }
Alexis Gallagher——高級iOS開發者
要說我最喜歡的Swift技巧,應該有兩個,一個是在REPL中,handy函數可直接用于獲取表達式靜態類型,而想要獲取任意實例值的類型名稱則可直接調用_stdlib_getDemangledTypeName。
func typeof<T>(@autoclosure () -> T) -> Any.Type { return T.self }
JP Simard——Realm iOS工程師
開發者可以直接使用nm工具通過libswiftCore.dylib來獲取所有私有的Swift標準庫函數,比如_stdlib_getTypeName()、_stdlib_demangleName()和_stdlib_conformsToProtocol():
cd `xcode-select -p`/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx nm -a libswiftCore.dylib | grep "T _swift_stdlib_"
Warren Moore——《Metal By Example》作者
當結構體中的所有成員屬于同一類型時(比如浮點型),通過Swift,開發者可以將其中的同類數組作為一個指針指向結構體中的成員類型。這一方法,讓我能夠非常簡便地去創建頂點數據的Metal緩沖區,而無需其他多余的復雜操作。
Mustafa Furniturewala——Coursera軟件工程師
我最喜歡的Swift資源是Swifter,對我來說,它是編程必備的參考指南,而最喜歡的技巧則是開發者可以使用任意的Swift函數來實現Objective-C風格的動態分配。
(編譯/唐小引 責編/劉璐璐)
文章來源:Realm
</div> 來自:http://www.csdn.net/article/2014-12-25/2823312-favorite-swift-tips-and-tricks