盤點開發者最喜愛的Swift技巧

edithfang發表於2014-12-30
Natasha Murashev——Capital One iOS工程師、Natasha The Robot博主

當我在構建iOS應用時,Swift能夠允許更多的函數語言程式設計方法,所以,為了能在改善Swift程式碼時做出更好的決策,我一直在學習函數語言程式設計。迄今為止,我最喜歡的函式方面的Swift資源有:

  • 功能型函式——能輕鬆更改函式,讓程式碼更獨立、可測試。
  • 包裝型別——我喜歡用可讀且安全的型別別名來編寫程式碼。
  • 型別設計——在設計程式時大幅使用正確的型別,有利於編譯器除錯。
  • Swift中柯里化函式的運用——在Haskell中,某種型別的函式指標只能指向特定引數型別和數目以及返回值型別的函式,而Swift則允許“currying”或部分應用函式,從而實現程式碼塊可重複使用。
  • Swift奇妙的差錯處理——與Objective-C相比,我特別喜歡這種簡單、可讀性強而又安全的錯誤處理方式。
  • 物件導向程式設計直達車——它為在程式碼中進行錯誤處理提供了一種最快捷的方式,於程式猿而言,最幸福之事莫過於此。
  • Swift函數語言程式設計——這是一本關於Swift函式比較深度的書籍,我每次重新讀過時都會發現不一樣的點,非常適合想要深入研究Swift函式以及如何將其運用到iOS程式碼中的開發者們閱讀。

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風格的動態分配。
來自:CSDN
相關閱讀
評論(1)

相關文章