屈指算來,Swift語言才發(fā)布半年左右,卻已深得眾多開發(fā)者的青睞,也有了許許多多的學習資源、項目和工具。在本文中,來自objc.io、LinkedIn等各個公司的軟件工程師及資深開發(fā)者總結了自己在接觸Swift過程中最喜愛的貼士與技巧,有些技巧即使是很早就入坑Swift的開發(fā)者都不知道,不妨一起來了解一下吧。
Natasha Murashev——Capital One iOS工程師、Natasha The Robot博主
當我在構建iOS應用時,Swift能夠允許更多的函數(shù)式編程方法,所以,為了能在改善Swift代碼時做出更好的決策,我一直在學習函數(shù)式編程。迄今為止,我最喜歡的函數(shù)方面的Swift資源有:
Chris Eidhof——objc.io創(chuàng)始人、《Swift函數(shù)式編程》作者
快速排序(Quicksort)——Swift中的快速排序實現(xiàn)可以說是前無古人后無來者,大多數(shù)Quicksort實現(xiàn)都需使用固定的內(nèi)存,而Swift則能以最簡潔清晰的程序實現(xiàn)快排:
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技巧應當如此:開發(fā)者可以通過創(chuàng)建一個已定義標準類的閉包來為匿名類實例設置委托,而閉包則將返回該類的一個新實例,并運行。示例代碼如下:
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開發(fā)者
于我而言,最喜歡的一點應該是Swift能在String類型和NSString類型中自動轉換,當無法打印String時,通過直接調(diào)用NSString的-description方法即可實現(xiàn)。
David Kobilnyk——ShopRunner軟件工程師
作為一門編程語言,我覺得Swift還不夠優(yōu)雅,而我也并沒有發(fā)現(xiàn)什么太特別的技巧,只是很喜歡原始類型、枚舉一起使用,就像這樣:
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開發(fā)者
要說我最喜歡的Swift技巧,應該有兩個,一個是在REPL中,handy函數(shù)可直接用于獲取表達式靜態(tài)類型,而想要獲取任意實例值的類型名稱則可直接調(diào)用_stdlib_getDemangledTypeName。
func typeof<T>(@autoclosure () -> T) -> Any.Type { return T.self }
JP Simard——Realm iOS工程師
開發(fā)者可以直接使用nm工具通過libswiftCore.dylib來獲取所有私有的Swift標準庫函數(shù),比如_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,開發(fā)者可以將其中的同類數(shù)組作為一個指針指向結構體中的成員類型。這一方法,讓我能夠非常簡便地去創(chuàng)建頂點數(shù)據(jù)的Metal緩沖區(qū),而無需其他多余的復雜操作。
Mustafa Furniturewala——Coursera軟件工程師
我最喜歡的Swift資源是Swifter,對我來說,它是編程必備的參考指南,而最喜歡的技巧則是開發(fā)者可以使用任意的Swift函數(shù)來實現(xiàn)Objective-C風格的動態(tài)分配。
(編譯/唐小引 責編/劉璐璐)
文章來源:Realm