Swift 3コリー化(Currying)

1156 ワード

前言:本文は王巍(onevcat)にある.「Swifter-Swift必須Tips(第3版)」です.iBooks. 章のメモ.
BankAccountクラスコード
class BankAccount: NSObject {
    var balance: Double = 0.0
    
    func deposit(amount: Double) {
        balance += amount
    }
}

BankAccountクラスを呼び出す方法
       let account = BankAccount()
        account.deposit(amount: 100)
        
        //   deposit()  。
        //  。
        //  , C 。
        // depositor     :(BankAccount) -> (Double) -> ()
        let depositor = BankAccount.deposit
        depositor(account)(100)

(BankAccount)->(Double)->()換言すれば、*この関数には単一のパラメータがあり、*1つのBankAccountインスタンス*があり、別の関数を返します.
次の関数*Doubleが必要で何も返さない
覚えておいてください:*Swiftのインスタンスメソッド:*は、インスタンスをパラメータとし、インスタンスに適用される関数を返すタイプのメソッドにすぎません.
もちろん、次の2つのコードは、「タイプメソッド」と「インスタンスメソッド」の前の関係をより明確にするために変更することができます.
 let depositor = BankAccount.deposit
 depositor(account)(100)

//  
BankAccount.deposit(account)(amount: 100)

例の方法:*OCでマイナス記号で始まる方法*Swiftでfuncで始まる
タイプメソッド:*OCのプラス記号で始まるメソッド*SwiftではClassとStaticで始まる*Classで始まる*staticで始まる*構造体、列挙、プロトコルで始まるメソッド、プロパティ、およびClassでのプロパティの前に置く.