LambdaKit 0.9.0

LambdaKit 0.9.0

测试已测试
语言语言 SwiftSwift
许可 NOASSERTION
发布日期最后发布2021年8月
SPM支持SPM

Keith SmileyMartin Conte Mac DonellScott Berrevoets维护。



LambdaKit 0.9.0

  • 作者
  • Martin Conte Mac Donell

LambdaKit

Closure可以让代码更清晰易读。您可以编写独立的小代码片段,而不用在应用中分散逻辑,Cocoa正在缓慢地向block/closure方法转型,但许多Cocoa库(如UIKit)仍不支持Closure。LambdaKit希望通过移除一些对使用Closing编码的令人烦恼的限制来促进这种编程方式。

要求

  • 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 in
    println("Button touched!!! \(button)")
}

UIGestureRecognizer

为UIGestureRecognizer提供闭包功能。

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

WKWebView

为WKWebView导航和UI代理提供闭包支持。

let webView = WKWebView()

webView.didStartProvisionalNavigation = { webview in
    print("didStartProvisionalNavigation: \(webview)")
}

webView.didFinish = { webview in
    print("didFinish \(webview)")
}

webView.didFailProvisionalNavigation = { webview, error in
    print("didFailProvisionalNavigation with error \(error)")
}

webView.didFail = { webView, error in
    print("didFail with error \(error)")
}

webView.didReceiveChallenge = { webView, challenge, completion in
    completion(.useCredential, URLCredential(trust: ...))
}

webView.shouldPreviewElement = { webview, elementInfo in
    print("shouldPreviewElement \(webview)")
    return true
}

UIImagePickerController

带有闭包回调的UIImagePickerController。

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

NSObject

为键值观察提供闭包包装。

在Mac OS X Panther中,Apple引入了一个名为"键值观察"的API。它实现了一个观察者模式,其中对象将通知观察者状态的任何更改。NSNotification是这个设计风格的简单形式;然而,KVO(键值观察)允许观察键值状态的任何变化。但是,键值观察的API有缺陷、难看且冗长。

与LambdaKit中的大多数其他闭包功能一样,观察节省了大量的代码和潜在的错误。

警告:使用闭包和 Cocoa 观察者互不干扰。这意味着你既不应该使用此包装添加“传统”的观察者然后移除它,也不能添加闭包观察者然后使用 Cocoa 方法移除它。

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

MFMailComposeViewController

采用闭包回调的 MFMailComposeViewController。

注意:在设置完成处理程序时,你不再需要处理控制器视图的消失。

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

MFMessageComposeViewController

采用闭包回调的 MFMessageComposeViewController。

注意:在设置完成处理程序时,你不再需要处理控制器视图的消失。

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

UIBarButtonItem

UIBarButtonItem 闭包事件初始化。

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

CADisplayLink

CADisplayLink 闭包实现。

CADisplayLink.runFor(5.0) { progress in
    println("Awesome \(progress * 100)%")
}

CLLocationManager

CLLocationManager 代理的闭包实现。

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

示例

let locationManager = CLLocationManager()
locationManager.starUpdatingLocation { location in
    println("Location: \(location)")
}
locationManager.stopUpdatingLocationHandler()

UIActivityItemProvider

常用 UIActivityItemProvider 的闭包实现。

let urlProvider = ActivityURLProvider { _, activityType in
    return URL(string: "https://example.com")
}

let activityViewController = UIActivityViewController(activityItems: [urlProvider], applicationActivities: nil)

警告:您不能同时使用闭包和设置代理。设置代理将阻止闭包被调用,设置闭包将覆盖代理属性。

作者

马丁·孔特·麦克唐纳尔 @fz