Swift30/90Days – objc.io 的 Swift 片段 1

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

Swift90Days – objc.io 的 Swift 片段 1

objcio 上的文章質量都很高,最近攢了十期,一起看下 Swift 相關的一些小貼士。

分解陣列

我們可以通過下面這個擴充套件給 Array 加上一個分解方法,返回首個元素和剩下的元素組成的元組:

extension Array {
var decompose : (head: T, tail: [T])? {
return (count > 0) ? (self[0], Array(self[1..<count])) : nil 
}
}

比如[1,2,3],就會拆解成 (1,[2,3]) 返回。我們可以用這個擴充套件寫一個求和程式:

func sum(xs: [Int]) -> Int {
if let (head, tail) = xs.decompose {
return head   sum(tail)
} else {
return 0
}
}

函式拼接

比如我們需要一個函式來獲取網頁的內容,再通過一個函式來計算有多少換行符。這樣可以獲取指定網址裡換行符:

import Foundation
func getContents(url: String) -> String {
return NSString(contentsOfURL: NSURL(string: url)!,
encoding: NSUTF8StringEncoding, error: nil)!
}
func lines(input: String) -> [String] {
return input.componentsSeparatedByCharactersInSet(
NSCharacterSet.newlineCharacterSet())
}
let linesInURL = { url in countElements(lines(getContents(url))) }
println(linesInURL("http://www.objc.io"))

因為在函數語言程式設計裡,函式的包含呼叫十分常見,我們可以定義一個自己的運算子:

infix operator >>> { associativity left }
func >>> <A, B, C>(f: B -> C, g: A -> B) -> A -> C {
return { x in f(g(x)) }
}

這樣就可以這樣呼叫了:

let linesInURL = countElements >>> lines >>> getContents
println(linesInURL("http://www.objc.io"))


References

Decomposing Arrays
Function Composition

相關文章

IOS開發 最新文章