上一篇提到響應式的概念, 為了更能理解響應式編程, 這篇將使用 Swift 基本語法來介紹.
在 Swift 中, 可以使用 computed variable, 來相對產生資料:
var value:Int = ...
var description: String {"\(value)"}
這個範例中, value是一個可變變數, description 是一個唯讀的變數(非常數).
由於這是比較節約的語法, 拓展之後如下:
var description: String 
{
    get 
    {
        return "\(value)"
    }
}
雖然有 computed variable, 可以讓相同物件的屬性之間有相依關係, 但是在實際應用上, 我們常常需要讓不同物件可以共同對事件變化, 這時可以用 didSet 的方式來延伸事件的影響範圍.
var source = 1
var associated = 2 
{
    didSet 
    {
        source = associated
    }
}
或是在函式執行的尾聲, 透過 clousure 的方式延伸事件:
func add(left:Int,
         right:Int,
         onComplete:(Int)->Void) 
{
    let result = left + right
    onComplete(result)
}
add(left: 1, right:2)
{ 
    returnValue:Int in
    print(returnValue)   // 3
}
在我們使用 Combine 之前, 若是需要將 add 的 result 再次執行兩次時, 會這樣處理:
add (left:1, right: 2)
{
    returnValue in
    add(left: returnValue, right: 2) 
    {
        returnValue2 in
        add(left: returnValue2, right: 2) 
        {
            print(returnValue2) // 7
        }
    }
}
而使用 Combine 之後, 則可以改寫為:
import Combine
func add(left:Int,
         right:Int) -> Int
{
    return left + right
}
let aStream:AnyCancellable = 
    Just(1)
    .map{add(left:$0,right:2)}
    .map{add(left:$0,right:2)}
    .map{add(left:$0,right:2)}
    .sink{print($0)} // 7
若是想要減少 add 的次數, 只需要註解或刪除 .map 即可.
簡單測驗:
func getData(from: URL)throws -> (URLResponse, Data)
whoami:
我是游諭 ytyubox