草庐IT

Closures

全部标签

ios - 将现有函数作为参数传递给 Swift 3 中的另一个函数

关闭。这个问题是notreproducibleorwascausedbytypos.它目前不接受答案。这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这个问题的解决方式不太可能帮助future的读者。关闭5年前。Improvethisquestion我是swift的新手,正在尝试寻找将函数作为参数传递给另一个函数的方法。我的代码结构如下funccreateDictionaryFromParams(param1:[String:String],param2:String,param3:String)->[String:String]{param1

Swift 递归函数,返回类型 Closure

下面是一个根据调用的返回函数进行加减的基本函数。funccalculateFunc(_inputValue:Int)->(add:(Int)->(Int),sub:(Int)->(Int)){funcaddFunction(_newValue:Int)->(Int){returninputValue+newValue}funcsubFunction(_newValue:Int)->Int{returninputValue-newValue}return(addFunction,subFunction)}calculateFunc(4).add(2)calculateFunc(4).su

Swift 闭包通过引用捕获数组

在Swift中,集合默认按值传递,我们可以使用inout使其在函数参数中按引用传递,但我们如何在闭包捕获变量中做到这一点?varlist=[1,2,3]funcedit(inoutlist:[Int]){list.append(4)dispatch_async(dispatch_get_main_queue()){list.append(5)}}edit(&list)...//afterdispatch_asyncwasexecutedNSLog("\(list)")结果将是[1,2,3,4]如何修改闭包中的原始变量()?更新:实际上,我有一个解决方法来处理这种情况,方法是将数组放入一

swift - swift 中的闭包和 withUnsafeBufferPointer()

我只是想快速了解闭包。我想使用数组的withUnsafeBufferPointer方法。在最简单的形式中,我可以成功地做这样的事情:varaa:[UInt8]=[1,2,3,4,5,6,7,8]varbb=aa.withUnsafeBufferPointer({$0.baseAddress})我也可以这样做:varbb=aa.withUnsafeBufferPointer({pointerValinpointerVal.baseAddress})但是,我无法在不在xcode中生成错误的情况下执行此操作:varbb=aa.withUnsafeBufferPointer({pointerV

ios - 如何检查 dataTaskWithRequest 是否完成?

我是iOS编程的新手,正在尝试创建我的第一个应用程序。我正在使用从服务器获取一些数据vartask=NSURLSession.sharedSession().dataTaskWithRequest(request,completionHandler:{(data,response,error)->Voidin据我了解,completionHandler闭包中的所有代码都是在任务完成时执行的。在我的ViewController中,我想检查此任务是否已完成,并且在完成之前不加载表。如何检查此任务是否已完成?我想我可以让completionHandler在它运行时将一些全局bool变量设置为

swift - Swift 中 -> Void 的必要性

在下面的代码中(使用Parse库),我有:query.findObjectsInBackgroundWithBlock({(objects:[AnyObject]?,error:NSError?)->Voidin//yadayada})->Voidin是否是代码中必需的(更确切地说,还有其他我可以使用的东西吗?删除它会在Xcode中引发错误。)?我对Swift很陌生,所以这可能是个愚蠢的问题... 最佳答案 in行是将参数放入block中的方式:(objects:[AnyObject]?,error:NSError?)->Voidi

swift - 方法闭包是否在 swift 中保留实例?

在swift中,我可以使用实例方法作为闭包,例如,将方法分配给回调self.someView.someCallback=self.doSomething那么,self.doSomething中是否强烈引用了self?上面的行是否创建了一个引用循环? 最佳答案 根据您的代码片段,有两种可能的情况:如果doSomething是self的实例方法,那么,是的,该行建立了一个强引用。请记住ClosuresareReferenceTypes.您可以很容易地确认这一点,并且很容易根据经验确认。考虑:classViewController:UIV

swift - 了解 Swift 闭包捕获

我已经经历了SwiftClosures和ARCinSwift我有点困惑。我有调用网络服务和使用响应数据的简单场景。这是我的基本实现:classWebServices:NSObject{funcrequestDataFromServer(completion:@escaping(_data:Data?)->Void){//webservicecallherecompletion(Data())}deinit{print("WebServicesdeinitializer...")}}classController:NSObject{privateletwebService=WebServ

ios - 'finish in' 在 Swift 中是什么意思?

我是一个菜鸟,一直在从Apple的Playgrounds和随机书籍中学习教程。我正在编写一个处理闭包的教程。我之前在另一个教程中看到过这个“完成于”,但我不知道它在外行术语中的确切含义。它正在完成什么,正在完成什么,里面有什么?还是有操作顺序的想法?这是使用它的函数:funcplaySequence(index:Int,highlightTime:Double){currentPlayer=.Computerifindex==inputs.count{currentPlayer=.Humanreturn}varbutton:UIButton=buttonByColor(color:in

swift - 为什么timer失效后还继续执行?

如果您运行下面的代码,即使在我使计时器无效之后,计时器的剩余代码仍会在没有任何中断的情况下执行。为什么?是不是因为闭包对自身有强引用,一直保留到自己完全结束?还是别的?这是否意味着在计时器执行期间使其无效没有任何作用?classViewController:UIViewController{vartimer:Timer?letserialQueue=DispatchQueue(label:"com.createTimer.serial")overridefuncviewDidLoad(){super.viewDidLoad()serialQueue.sync{[weakself]ins