Tag: closures

iOS的Swift通过closures属性?

比方说,我有一个自定义的UIView,让我们称之为MyCustomView。 在这个视图里面是一个UITextField属性。 假设我的目标是能够创build一个MyCustomView的实例,并将其添加到某个视图控制器,我希望该视图控制器能够处理在该文本字段上采取的行动。 例如,如果我在文本字段中的键盘上点击“返回”,我可能想要做一些操作 – 让我举一个例子来说明我用一些Objective-C伪代码想象的内容: MyCustomView *myView = [[MyCustomView alloc] initWithFrame:CGRectMake(10,10,100,100)]; myView.textField.actionBlock = { /* do stuff here! */ } [self.view addSubview:myView]; 然后在MyCustomView类中,我会做这样的事情: – (BOOL)textFieldShouldReturn:(UITextField *)textField { self.actionBlock(); return NO; } 我想自定义视图是UITextFieldDelegate,所以每次我这样做,我不会把所有的委托方法添加到视图控制器,我将它添加到,而是有一个单一的实现,只是做任何我传递给它…如何迅速做到这一点?

Objective-C块,recursion失败

Sup家伙, 我试图做一个自我调用的function,但把所有的东西放在一个块上, 正如你所看到的,下面的函数被称为无限次(直到arcrandom返回一个低于50的数),你应该期望输出一个可变数量的“RUNNING”消息,这取决于机会。 void (^_test_closure)(void) = ^ { NSLog(@"RUNNING"); if(arc4random() % 100 > 50) { _test_closure(); } }; _test_closure(); 但是,运行它时,我得到一个EXC_BAD_ACCESS错误,我发现的原因是当代码尝试调用闭包内的_test_closure时,它基本上指向无处。 有谁知道如何使上面的代码工作?

在Swift中更新的UILabel文本拒绝显示

在学习Swift的同时,我正在编写一个简单的iOS应用程序来从一个网站为给定的城市刮取天气信息并将其显示在UILabel中。 代码使用“NSURLSession.sharedSession()。dataTaskWithURL”闭包。 虽然我能够正确获取数据并捕获“UILabel.text”中的相关文本,但我无法获得实际的应用程序来显示更新的UILabel。 我究竟做错了什么? 这是相关的代码: @IBAction func buttonPressed(sender: AnyObject) { var urlString = "http://www.weather-forecast.com/locations/" + cityName.text.stringByReplacingOccurrencesOfString(" ", withString: "") + "/forecasts/latest" var url = NSURL(string: urlString) let task = NSURLSession.sharedSession().dataTaskWithURL(url) {(data, response, error) in var urlContent = NSString(data: data, encoding: NSUTF8StringEncoding) as String var contentArray = urlContent.componentsSeparatedByString("<span class=\"phrase\">") var weatherInfo = contentArray[1].componentsSeparatedByString("</span>") self.resultShow.text = weatherInfo[0] […]

快速从封闭中获取数据

我已经做了一个查询parsing并获取一个GeoPoint坐标数组。 这是在closures内完成的。 我只能访问该闭包内的数组值。 我需要能够使用这些值,以便他们可以用作地图上的注释,但我不能去他们。 有人可以告诉我如何从闭包中获取数组值。 码: var user = PFUser.currentUser() user["location"] = geopoint var query = PFUser.query() query.whereKey("location", nearGeoPoint:geopoint) query.limit = 10 query.findObjectsInBackgroundWithBlock({ (objects: [AnyObject]!, error: NSError!) -> Void in for object in objects { var user:PFUser = object as PFUser var otherUsersCoord = [PFGeoPoint]() otherUsersCoord.append(user["location"] as PFGeoPoint) println("The other users coords are: \(otherUsersCoord)") } […]

什么时候使用快速closures?

我已经去了几个月的开发,并渴望在我的编程模式中实现新的东西。 现在我正在学习闭包,并且对它的语法知之甚less,知道它可以用来代替callback。 以及在一些UIViewAnimation和分类中实现它。 但是,我真的想知道它的用途,除此之外,我们应该在我们的基本编程中使用闭包。 就像我们使用委托,当我们想从孩子发送信息到家长..所以任何解释或简短的例子,其实际上可以用在我们的日常快速编程会有帮助吗? 谁能告诉我这些封闭是如何计算价值的 reversed = sorted(names, { (s1: String, s2: String) -> Bool in return s1 > s2 } ) 在这些例子中,名称和闭包作为一个方法的参数..但是,这实际上是如何计算的? 你能解释一下在这个animation代码中通过闭包的过程是如何工作的吗? UIView.animateWithDuration(duration: NSTimeInterval, animations: (() -> Void)?, completion: ((Bool) -> Void)?) 我真的想知道stream量?

ios中block(Objective C)和closure(Swift)之间的区别

在教程中,它的function都相同,即使闭包更容易,然后阻止和它避免了块和内存pipe理的复杂性,我已经经历了许多教程,但除了这些我没有得到区别之间的swift的“封闭” Objective-C“块”。 任何人都可以深入解释这种差异。 任何帮助,将不胜感激。

在Swift中,$ 0代表什么?

我已经看到迅速封闭$ 0里面,有时他们使用$ 1。 什么是$ 0,什么是其他的$ x你可以使用? 这里是使用它的例子。 applyMutliplication(2, {$0 * 3}) array.map({$0 + 1}) 谢谢!

我可以在Swift中使用多个分隔符分割一个数字string吗?

我有一个分数和十进制数字的string数组。 let stringArray = [ "0.0", "193.16", "5/4", "503.42", "696.58", "25/16", "1082.89", "2/1"] 每个数组元素都映射到一个闭包,其中的数字是从string中提取的。 let values = stringArray.map { s -> Double in 任何分数(见前面的文章 ) let splitStrings = s.characters.split(separator: "/").map(String.init).map({ Double($0) }) 或十进制 let splitStrings = s.characters.split(separator: ".").map(String.init).map({ Double($0) }) 问题 :在Swift中有一种方法可以使用多个分隔符来分割string,所以一个闭包可以返回小数值或小数值吗? (继续closures) switch (token)) { case "/" : print( "fraction") let pathA = splitString[0]!/splitString[1]! […]

Swift Closure中的返回types必须是Void的可选链接

我正在创build一个应该有自己的run()实现的脚本的双向链接列表( MSScript run() ,并且在他们准备好时调用下一个脚本( rscript )。 我想创build的一个脚本只是一个延迟。 它看起来像这样: class DelayScript : MSScript { var delay = 0.0 override func run() { let delay = self.delay * Double(NSEC_PER_SEC) let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay)) let weakSelf = self dispatch_after(time, dispatch_get_main_queue()) { weakSelf.rscript?.run() Void.self } } init(delay: Double) { super.init() self.delay = delay } } rscript是下一个要运行的脚本。 问题是,如果我删除dispatch_after的最后一行,它不会编译,这是因为从可选的链接run()更改返回types 。 […]