Tag: closures

正确引用dispatch_async中的self

我如何恰当地引用自我迅速closures? dispatch_async(dispatch_get_main_queue()) { self.popViewControllerAnimated(true) } 我得到的错误: Cannot convert the expression's type 'Void' to type 'UIViewController!" 随机我试过: dispatch_async(dispatch_get_main_queue()) { () self.popViewControllerAnimated(true) } 它的工作。 不知道多余()做什么! 任何人都在意解释? 谢谢!

Swift weakSelf在闭包语法中

我有这个代码来获得JSON: Alamofire.request(.GET, worlds).responseJSON { (request, response, JSON, error) in println(JSON) //weakSelf.serverList = JSON } 如何在这里宣布自己弱? 我知道它应该是无主的,但我找不到正确的语法。 当我尝试使用[unowned self] .serverList而不是注释行时,编译器显示错误“使用未parsing的标识符unowned”。 我也试图像这样在块之前声明不变: unowned let uSelf = self 它的作用像一个魅力,但我想了解如何在我的情况下使用[无主自我]。

是否有可能在Swift中创build一个通用的闭包?

func myfunc<T>(i:T) -> T { return i } 是否有可能使这个通用函数闭包? let myfunc = { <T>(i:T) -> T in return i } 这不起作用…

封闭与function之间的区别作为迅速的论证

我有近4年的Objective C经验和一个新手。 我试图从Objective C的angular度来理解swift的概念,所以如果我错了,请引导我:) 在目标c中,我们有块(可以asynchronous执行的代码块),这是非常完美的。 但是现在我们可以把一个函数作为parameter passing给另一个函数,这个函数可以稍后执行,然后我们也可以closures它。 按照苹果 “function是条款的特例”。 按照O'Reilly的 说法,“当一个函数作为一个值传递时,它会传递给外部variables的内部引用,这就是函数的一个闭包。 所以我试了一下理解相同:) 这是我的closures override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a ni let tempNumber : Int = 5 let numbers = [1,2,3,4,5] print (numbers.map({ $0 – tempNumber})) } variablestempNumber甚至在声明闭包之前声明,但闭包有权访问variables。 现在,而不是一个地图,我试图使用自定义类传递闭包作为参数,并尝试执行相同的代码:)虽然现在闭包得到执行在不同的范围,它仍然有访问tempNumber。 我得出的结论是:闭包有权访问在与自己closures的范围内声明的variables和方法,尽pipe它在不同的范围内被执行。 现在,而不是传递闭包作为参数,尝试传递函数作为参数, class test { func […]

迅速closures和asynchronous任务

想象一种情况,当你想从服务器asynchronous加载一些文本,并将结果显示在ViewController's UITextField 。 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { //… some long running async operation if let textResponse = responseFromServer { dispatch_async(dispatch_get_main_queue(), { [weak self] () in self?.textField.text = textResponse }) } }) A.)我是否需要在用于asynchronous调用的closures中使用[weak self]? 我以为我需要,但是我不确定在StackOverflow上阅读了一些Q / A后,经过了一些不使用[weak self]进行asynchronous任务+闭包的开源应用程序。 即: 你唯一想要使用[无主自我]或者[弱自我]的时候就是创造一个强大的参考周期。 ( 我们总是在Swift中使用封闭的[unowned self] ) 在我的情况下没有强大的参考周期。 要么: 但要说清楚的是,在这种情况下,最好还是用一个强有力的参照。 ( Swift ARC和块 ) B.)让我们说,这是强有力的参考。 当用户导航到asynchronous加载中的不同页面时,ViewController会发生什么? 它会保持不可见的ViewController在应用程序的内存,直到asynchronous任务完成?

Swift像闭包一样使用select器参数

我只是想知道是否有可能将一个函数传递给一个button操作(通常是一个select器)。 例如,通常我会说: UIBarButtonItem(title: "Press", style: .Done, target: self, action: "functionToCall") func functionToCall() { // Do something } 但我想知道是否有可能做到这样的事情: UIBarButtonItem(title: "Press", style: .Done, target: self, action: { // Do Something }) 我想这样做的原因是因为我的function是非常简单的,看起来它会更整洁,更像Swift,就像他们将重点放在closures上一样。

iOS Swift:闭包(callback)与代表,何时使用哪个?

就我个人而言,我更喜欢Swift中委托的callback,因为它非常简单易懂。 同时,有些人更喜欢委托,因为委托是其他语言(如C#)中的stream行模式。 我在网上find了一些讨论: 1.“为什么你不应该在Swift中使用代表? https://medium.cobeisfresh.com/why-you-shouldn-t-use-delegates-in-swift-7ef808a7f16b#.hqb7zrc1v 2.苹果正在把重点转移到callback模式上 https://www.reddit.com/r/swift/comments/2ces1q/closures_vs_delegates/ 3.块或代表? http://blog.stablekernel.com/blocks-or-delegates/ 在阅读这些讨论之后,我仍然对这个偏好犹豫不决。 我想知道什么时候最好使用闭包,何时使用代理更好? 和原因? 谢谢!

如何在swift中返回asynchronous内部函数中的外部函数?

我正在创build一个swift类,它包含一个validation用户是否为true的函数。 但是,由于dataTaskWithRequest函数是asynchronous执行的,因此即使结果为true, userVerifyResult也将始终返回“false”。 我怎样才能解决这个问题? class userLibService: NSObject{ func VerifyUser() -> String{ var userVerifyResult = "false" var url = NSURL(string: "http://www.example.com/test.php")! var request = NSMutableURLRequest(URL: url) request.HTTPMethod = "POST" var bodyData = "username=tee&password=123&data=true" request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding) let task = NSURLSession.sharedSession().dataTaskWithRequest(request){ data, response, error in var parseError: NSError? if let json = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &parseError) […]

如何添加@noescape注释到可选的闭包

我的function有这个签名: func foo(bar: String, baz: ((String) -> ())? = nil) 而现在,我想要让self在给定的封闭内逃脱。 但是当我尝试这个: func foo(bar: String, @noescape baz: ((String) -> ())? = nil) 编译器抱怨: @noescape may only be applied to parameters of function type 有没有可能在可选参数中使用它?

如何迅速在closures中抛出错误?

请看下面的代码: override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? { let deleteAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Delete", handler: { (action : UITableViewRowAction, indexPath : NSIndexPath) -> Void in if let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext{ let restaurantToDelete = self.fetchResultController.objectAtIndexPath(indexPath) as! Restaurant managedObjectContext.deleteObject(restaurantToDelete) // Saving managedObjectContext instance, and catch errors if it fails do { […]