タグ

closureに関するYudoufuのブックマーク (5)

  • Swiftのクロージャで再帰 - Qiita

    WWDC 2014でのスライド'Advanced Swift'に不動点コンビネータを使った見事な方法が載っていたので問題を簡潔にしてメモしておきます.情報をくれた@Ushio@githubさんに感謝. letだけでは無理 letを(letrecのように)使って let fib = {(n: Int) -> Int in return n < 2 ? n : fib(n - 1) + fib(n - 2) }

    Swiftのクロージャで再帰 - Qiita
  • Swiftの循環参照問題におけるunownedとweakの使い分けについて - Qiita

    循環参照するか、しないかの切り分け 循環参照するか、しないかの切り分けはエンジニアが考慮する必要があります。この切り分けはObjCと同様なので、ここでは詳細には触れません。 ちなみに、Xcode6 Beta5のSwiftではコンパイルワーニングで循環参照を知らせてくれません。とはいえ循環参照のコンパイルワーニングはObjCでも全部網羅されていないので、最終的にはエンジニアが考慮する必要があるのはかわらないのですが。 対象の変数をweakで対応し、実行時に変数がnilになる可能性の切り分け そもそも、実行時に循環参照する対象の変数がnilになる可能性で判断ではなく、対象の変数定義がOptional定義かどうかで判断できないか 常にOptional定義かどうかで判断できないのではと思っています。例えばselfはself!としてunwrapしてアクセスしないので、selfはOptionalではな

    Swiftの循環参照問題におけるunownedとweakの使い分けについて - Qiita
  • Swiftのコツ - owned self と weak self - mobiledev日記

    2015-06-28 Swiftのコツ - owned self と weak self Swift Swiftでブロック構文を使うとき、循環参照を避けるためよく [unowned self] とか [weak self] とかきます。 で、この2つの差について今回は解説します。 結論からいいますと、 迷う状況なら weak self です。 unowendのほうがパフォーマンス面は有利ですが、誤った使い方をするとクラッシュします。 weakのほうが安全なのです。 ためしに、こちらのTimerクラスを使った処理を書いて比較してみましょう (※見やすさの都合、引数のTimerは消してます) class Test { var count = 0 func main() { //printCount()を一定時間おきによびだす Timer.start(1, true) { self.print

    Swiftのコツ - owned self と weak self - mobiledev日記
    Yudoufu
    Yudoufu 2015/12/02
    キャプチャのわかりやすい説明
  • [Swift] クロージャを使ってUIViewのイベントを外部で指定できるようにする | Kengo:Lab けん悟庵

    Swiftではクロージャを関数ポインタに近い形で使えるため、UIViewのタッチイベントなどを簡単に外部に分離できます。 今回は私のお気に入りの方法で、タッチイベント4種類を外部から呼べるようにする例を挙げます。 (※2015-10-20: Swift1.2からSwift2.0に修正しました) UIView派生クラス タッチイベント用にev_touches_****という変数を4つ作成し、それぞれの初期化にクロージャを入れておきます。 クロージャ内の処理はからっぽにしておきます。こうするとクロージャを初期化で入れておけるので、各オブジェクトのnilチェックしなくても問題なく動作します。またSwiftの型推論が力を発揮します。関数ポインタのようにややこしい型定義をしなくてすむので楽チンです。 KNGView.swift import UIKit class KNGView : UIView

  • 関数、オブジェクト、クロージャ - FAX

    (thanks to id:koyachi、del.icio.us/rtk2106) OOPとFPと。関数、オブジェクト、クロージャの使い分けについて考えます。 関数型が良いのか、オブジェクト指向が良いのか、知りたいと思っていました。色々なページを読み、現時点で一応の答えを得ました。 カウンタを例にして、関数、スコープ、オブジェクト、クロージャの順に見て行きます。関数関数は処理です。入力と出力があります。関数型プログラミングでは、関数同士の入力と出力を連結しプログラムが構成されます。 var current = 0; function next(v){ return v + 1 } function previous(v){ return v - 1 } ok( 1 == ( current = next(current) ) ); ok( 2 == ( current = next(cu

  • 1