LambdaKit, 在大多数使用的UIKit方法上,闭包

分享于 

7分钟阅读

GitHub

  繁體 雙語
Closures on most used UIKit methods
  • 源代码名称:LambdaKit
  • 源代码网址:http://www.github.com/Reflejo/LambdaKit
  • LambdaKit源代码文档
  • LambdaKit源代码下载
  • Git URL:
    git://www.github.com/Reflejo/LambdaKit.git
    Git Clone代码到本地:
    git clone http://www.github.com/Reflejo/LambdaKit
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/Reflejo/LambdaKit
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    LambdaKit

    闭包使代码清晰易读。 你可以编写自己包含的小代码 Fragment,而不是让逻辑分散在整个应用中,Cocoa 正在慢慢移动到块/闭包,但是还有很多 Cocoa 库( 如UIKit等) 不支持闭包。 LambdaKit希望通过删除一些烦人的-,在某些情况下阻碍编码的限制来促进这种编程。

    要求

    • iOS 8.0 +
    • Xcode 7.3

    安装

    CocoaPods 是 Cocoa 项目的依赖项管理器。

    CocoaPods 0.36为 Swift 和嵌入式框架添加支持。 你可以使用以下命令安装它:

    $ gem install cocoapods

    要使用CocoaPods将LambdaKit集成到你的Xcode项目中,请在你的Podfile 中指定它:

    source 'https://github.com/CocoaPods/Specs.git'platform :ios, '8.0'use_frameworks!
    pod 'LambdaKit'

    然后,运行以下命令:

    $ pod install

    用法

    UIControl

    UIControl的关闭控制事件处理

    let button = UIButton.buttonWithType(.System) as! UIButton
    button.addEventHandler(forControlEvents:. TouchUpInside) { button inprintln("Button touched!!! (button)")
    }

    UIGestureRecognizer

    UIGestureRecognizer的关闭功能。

    let doubleTap = UITapGestureRecognizer { gesture, state inprintln("Double tap!")
    }
    doubleTap.numberOfTapsRequired=2self.addGestureRecognizer(doubleTap)

    UIWebView

    UIWebView代理的关闭支持。

    let webView =UIWebView()
    webView.shouldStartLoad= { webView, request, type inprintln("shouldStartLoad: (request)")
     returntrue}
    webView.didStartLoad= { webView inprintln("didStartLoad: (webView)")
    }
    webView.didFinishLoad= { webView inprintln("didFinishLoad (webView)")
    }
    webView.didFinishWithError= { webView, error inprintln("didFinishWithError (error)")
    }

    UIImagePickerController

    带关闭 callback(s)的UIImagePickerController。

    let picker =UIImagePickerController()
    picker.didCancel= { picker inprintln("DID CANCEL! (picker)")
    }
    picker.didFinishPickingMedia= { picker, media in 
     println("Media: (media[UIImagePickerControllerEditedImage])")
    }self.presentViewController(picker, animated: true, completion: nil)

    NSObject

    用于 key-value 观察的闭合包装器。

    在 Mac OS X 黑豹中,苹果引入了一个叫做"key-value 观察。"的API,它实现了一个观察者 Pattern,其中一个对象将通知观察者。 NSNotification是这种设计风格的基本形式;但是KVO允许观察 key-value 状态的任何变化。 然而,key-value 观察的API有缺陷。丑陋和冗长。

    LambdaKit中的它的他大多数闭包能力一样,观察保存和一堆代码和一串潜在的Bug。

    警告: 使用闭包和 Cocoa 观察者是独立的。 意味着不应该添加"繁体中文"观察者,然后使用这里包装移除它,也不能添加关闭观察者并使用 Cocoa 方法删除它。

    self.observeKeyPath("testing", options:. New|. Old) { newValue, oldValue inprintln("Property was: (oldValue), now is: (newValue)")
    }

    MFMailComposeViewController

    带关闭回调的MFMailComposeViewController。

    注意,当设置完成处理程序时,你没有responsability来关闭视图控制器。

    let composeViewController = MFMailComposeViewController { viewController, result, type inprintln("Done") }
    composerViewController.setSubject("Test")

    MFMessageComposeViewController

    带关闭回调的MFMessageComposeViewController。

    注意,当设置完成处理程序时,你没有responsability来关闭视图控制器。

    let composeViewController = MFMessageComposeViewController { viewController, result inprintln("Done") }
    composerViewController.body="test sms"

    UIBarButtonItem

    UIBarButtonItem的关闭事件初始化。

    self.navigationItem.rightBarButtonItem=UIBarButtonItem(image: image, style:. Bordered) { btn inprintln("Button touched!!!!!! (btn)")
    }

    CADisplayLink

    CADisplayLink闭包实现。

    CADisplayLink.runFor(5.0) { progress inprintln("Awesome (progress *100)%")
    }

    CLLocationManager

    CLLocationManager代理的闭包实现。

    注意使用 startUpdatingLocation(handler) 时,你需要使用相应的stopUpdatingLocationHandler,否则会泄漏内存。

    例如:

    let locationManager =CLLocationManager()
    locationManager.starUpdatingLocation { location inprintln("Location: (location)")
    }
    locationManager.stopUpdatingLocationHandler()

    警告:你不能使用闭包和同时设置代理。 设置委托将阻止调用闭包,并且设置闭包将覆盖委托属性。

    NSTimer

    基于NSTimer调度的简单闭包。

    NSTimer.scheduledTimerWithTimeInterval(1.0, repeats: false) { timer inprintln("Did something after 1s!")
    }

    警告:你不能使用闭包和同时设置代理。 设置委托将阻止调用闭包,并且设置闭包将覆盖委托属性。

    作者

    Martín Donell @fz


    method  方法  CLOS  Uikit  closure  Closures  
    相关文章