以下是来自HockeyApp的示例,它生成以下代码:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
BITHockeyManager.sharedHockeyManager().configureWithIdentifier(API_KEY)
BITHockeyManager.sharedHockeyManager().disableCrashManager = true
BITHockeyManager.sharedHockeyManager().startManager()
BITHockeyManager.sharedHockeyManager().authenticator.authenticateInstallation()
return true
}
注意每次通话中BITHockeyManager.sharedHockeyManager()
的重复。我正在寻找类似(伪代码)的语法:
with BITHockeyManager.sharedHockeyManager() do {
.configureWithIdentifier(API_KEY)
.disableCrashManager = true
.startManager()
.authenticator.authenticateInstallation()
}
有没有办法在Swift中执行此操作?
编辑:写完这个问题后,我注意到Alamofire正在使用"可链接的方法" ,这实际上是我原本想要的。这允许使用简洁的语法,如下所示(代码来自http://nshipster.com/alamofire/):
Alamofire.request(.GET, "http://httpbin.org/get")
.response { (request, response, data, error) in
println(request)
println(response)
println(error)
}
要在HockeyApp中使用相应的语法,需要修改BITHockeyManager
类。
答案 0 :(得分:6)
我认为不像
with BITHockeyManager.sharedHockeyManager() do {
.configureWithIdentifier(API_KEY)
.disableCrashManager = true
// ...
}
在Swift中是可能的,但可以做的是定义泛型函数
func with<T>(item : T, closure : T -> Void) {
closure(item)
}
简单地用给定项作为参数调用闭包,
然后利用“尾随闭包语法”和“简写参数名称”$0
:
with( BITHockeyManager.sharedHockeyManager() ) {
$0.configureWithIdentifier(API_KEY)
$0.disableCrashManager = true
// ...
}
答案 1 :(得分:3)
您始终可以使用以下方法,该方法稍微短一些,但仍需要重复变量manager
:
let manager = BITHockeyManager.sharedHockeyManager()
manager.configureWithIdentifier(API_KEY)
manager.disableCrashManager = true
manager.startManager()
manager.authenticator.authenticateInstallation()