草庐IT

Closures

全部标签

ios - 使用完成处理程序(闭​​包)语法从 objective-c 文件调用 swift 文件中的函数

我在从swift函数中有闭包的objective-c文件调用swift文件中的函数时遇到问题。这是Swift函数//InUtilitiesclassstaticfuncgetString(query:NSString,completion:@escaping(_response:NSString)->Void){completion("hello")}这就是我尝试在objective-c类中调用它的方式:[UtilitiesgetString:@"hithere"completion:^(NSString*response){NSLog(response);}];我收到错误“选择器‘g

swift - 为什么我在第二个例子中得到保留圈?

为什么我们在第二个例子中得到了强引用圈,为什么我们在第一个例子中没有?classTest1{varname:String="Ted"lazyvargreeting={return"Hello\(self.name)"}()deinit{print("goodby1")}//Noretaincyclehere..}varv1:Test1?=Test1()v1?.greetingv1=nil//printsgoodby1,dealocationdoneclassTest{varname:String="Mery"lazyvargreeting={return"Hello\(self.nam

objective-c - 如何从闭包中强制捕获?

假设在Objective-C中有以下情况:一个block数组。所以我想运行一个block,我这样做:myBlockblock=blocks[0]();现在假设这一行在try中运行:myBlockblock=blocks[0];@try{block();}@catch{//catchanerror}现在想象一下,我想在block中添加一行以强制捕获。我在objective-C中所做的是将这一行添加到一个block中[NSExceptionraise:@"Failed"format:@"Failed",nil];现在我想在Swift中做到这一点letmyClousure=closures[

ios - UILabel 不会更新核心运动闭包内调用的文本

每次摇动设备时,我都试图更改UILabel的文本。我需要一些解决方法来捕捉比UIEventSubtype抖动更频繁的抖动。motionMethod被调用,尽管我的UILabel的文本在它最终更新之前保持不变几秒钟。这是我的代码:letdelegate=(UIApplication.sharedApplication().delegateasAppDelegate)varplayer:Player!varmotionManager:CMMotionManager?letaccThreshold=1.0varreferenceTime=NSDate()lettimeThreshold=0.

带闭包的 Swift 变量声明

我看到了一个让我感到困惑的声明。(这里的语法)staticvardateFormatter:NSDateFormatter={varformatter=NSDateFormatter()formatter.dateFormat="yyyy-MM-dd"returnformatter}()要声明一个变量,看起来它使用一个函数(初始化器)来创建一个。由于我不熟悉Swift中的闭包,我找到了一些有用的教程。但是,上面的示例似乎不适合其中任何一个。引用:http://fuckingclosuresyntax.com/任何建议、引用或教程将不胜感激。 最佳答案

ios - 指定完成处理程序的更短方法

我已经遇到过几次这个问题,所以我想伸出援手。我有许多网络接口(interface)负责进行异步网络调用,每个接口(interface)中大约有5/6个函数都使用具有相同定义的完成处理程序:(success:Bool,resources:[String:AnyObject]->Void)我正在寻找一种替代方法来将它添加到每个函数的末尾,因为它强制每个函数声明到2/3行。例如funcperformSomeNetworkCall(withThisParamparm1:AnyObject,param2:AnyObject,completion:(success:Bool,resources:[

swift - 你应该如何处理 UIAlertAction 的闭包参数

我一直在尝试创建一个UIAlertAtion,它也有一个处理程序。我阅读了this的答案问题并知道如何去做。我的问题只是关于它的关闭部分。1)我知道我可以写:{alertinprintln("Foo")}或{_inprintln("Foo")}但我不能写{println("Foo")}。在评论here之所以解释是因为您需要处理参数操作。这是否意味着由于处理程序的类型为(UIAlertAction)->Void)?我必须始终捕获传递的alertAction?2)我还读了this答案基本上是说你可以传入一个函数作为你的参数,但该函数应该采用UIAlertAction->Void类型的东西,

ios - 如何在 Swift 中创建闭包从字符串中提取两个整数以执行计算

我目前在Swift中使用带有闭包的map属性从数组中提取线性因子并计算跨越一个Octave音程的音乐频率列表。lettonic:Double=261.626//middleCletfactors=[1.0,1.125,1.25,1.333,1.5,1.625,1.875]letfrequencies=factors.map{$0*tonic}print(frequencies)//[261.62599999999998,294.32925,327.03249999999997,348.74745799999994,392.43899999999996,425.1422499999999

ios - 处理URLSession时是否总是需要[Weak self]?

我不知道在这种情况下是否需要使用[weakself]?HTTPClient.swift:structHTTPClient{letsession=URLSession.sharedfuncget(url:URL,completion:@escaping(Data)->Void){session.dataTask(with:url){data,urlResponse,errorincompletion(data)//assumeeverythingwillgowell}.resume()}}服务.swiftstructService{lethttpClient:HTTPClientinit

Swift 使用闭包初始化结构

publicstructStyle{publicvartest:Int?publicinit(_build:(Style)->Void){build(self)}}vars=Style{valueinvalue.test=1}变量声明错误Cannotfindaninitializerfortype'Style'thatacceptsanargumentlistoftype'((_)->_)'有谁知道为什么这行不通,对我来说这似乎是合法的代码郑重声明,这也行不通vars=Style({valueinvalue.test=1}) 最佳答案