草庐IT

Closures

全部标签

swift - 在 Swift 中使用@discardableResult 作为闭包

Swift3有introduced函数的@discardableResult注释禁用未使用函数返回值的警告。我正在寻找一种方法来消除此关闭警告。目前,我的代码如下所示:funcf(x:Int)->Int->Int{funcg(_y:Int)->Int{doSomething(with:x,and:y)returnx*y}returng}在不同的地方,我调用了一次f来获得一个闭包g,然后我重复调用它:letg=f(5)g(3)g(7)g(11)在大多数地方,我只对doSomething的嵌套调用的副作用感兴趣,而不对闭包g的返回值感兴趣。使用Swift3,我的项目中现在有许多关于未使用结

swift - NSLock.lock() 在锁定已持有时执行?

我正在审查一些Alamofiresample重试代码:funcshould(_manager:SessionManager,retryrequest:Request,witherror:Error,completion:@escapingRequestRetryCompletion){lock.lock();defer{lock.unlock()}ifletresponse=request.task.responseas?HTTPURLResponse,response.statusCode==401{requestsToRetry.append(completion)if!isRef

swift - 如何在本地闭包中调用非转义闭包?

这个问题在这里已经有了答案:Whydoclosuresrequireanexplicit`self`whenthey'reallnon-escapingbydefaultinSwift3?(3个答案)关闭6年前。我有一个看起来像这样的函数:functest(closure:()->()){letlocalClosure={closure()}localClosure()}这只是一个例子,并不能完全反射(reflect)我遇到的问题,显然这里我可以直接调用closure!应该清楚,在上面的代码中,closure是无法逃逸的。但是,我收到错误:Closureuseofnon-escapin

ios - 用户位置更新后触发的函数

重要说明:我知道我可以简单地在didUpdateLocations中调用我的callback函数并实现我想要的。不幸的是,由于在该项目中做出了一些预先存在的设计决策(我对此没有影响),因此无法采用这条路线。我需要编写一个函数,在用户坐标第一次更新时触发,然后将这些坐标传递给完成处理程序。在我的例子中,该完成处理程序是一个名为fetchCountry(fromLocation:CLLocation)的函数,它返回与给定的CLLocation对应的国家/地区。换句话说,我想编写一个类似于didUpdateLocations的函数,能够在收到这些更新后调用完成处理程序:funcgetUser

swift - 在 Swift 中重用闭包

以下哪个更好:示例1:varx:Int=0for_in1...5{someList.append(Foobar(someClosure:{println("X=\(x)")}))}示例2:varx:Int=0varc:()->()={println("X=\(x)")}for_in1...5{someList.append(Foobar(someClosure:c))}如果我将闭包视为引用类型,那么sample2最好,因为我正在重用同一对象(减少内存分配,重用对象)。如果我将闭包视为值类型,那么它真的无关紧要。我必须相信编译器能够识别闭包是相同的并且它知道使用相同的闭包(类似于如果我在

ios - 如何快速返回异步内部函数内的外部函数?

我正在创建一个swift类,其中包含一个验证用户是否真实的函数。但是,由于dataTaskWithRequest函数是异步执行的,即使结果为真,userVerifyResult也将始终返回“false”。我该如何解决这个问题?classuserLibService:NSObject{funcVerifyUser()->String{varuserVerifyResult="false"varurl=NSURL(string:"http://www.example.com/test.php")!varrequest=NSMutableURLRequest(URL:url)request.

ios - swift 函数和闭包可以符合 Hashable 吗?

假设我想要一个Set函数或闭包。以下是我的处理方式:typealiasHandlerX=()->()staticvarhandlersX=Set()这会产生以下编译器错误:Type'HandlerX'(aka'()->()')doesnotconformtoprotocol'Hashable'这是死胡同吗? 最佳答案 是的,这是一条死胡同。Hashable不是你真正的问题;无法确定两个闭包是否相等(这是Hashable的基本要求)。 关于ios-swift函数和闭包可以符合Hashabl

Swift 闭包 - 强制闭包始终完成

是否可以强制完成关闭?与具有返回值的函数必须始终返回的方式相同,如果有一种方法可以强制闭包包含始终完成所需的语法,那就太棒了。例如,这段代码不会编译,因为函数并不总是返回一个值:funcisTheEarthFlat(withUserIQuserIQ:Int)->Bool{ifuserIQ>10{returnfalse}}以完全相同的方式,我想定义一个带有闭包的函数,如果闭包永远不会返回,也不会编译。例如,下面的代码可能永远不会返回completionHandler:funcisTheEarthFlat(withUserIQuserIQ:Int,completionHandler:(Bo

swift - swift 中闭包参数的语法是什么

在Swiftheader中,isSeparator:参数接受一个闭包publicfuncsplit(maxSplit:Int=default,allowEmptySlices:Bool=default,@noescapeisSeparator:(Self.Generator.Element)throws->Bool)rethrows->[Self.SubSequence]但是在documentation,它以不同的方式列出闭包语法{(parameters)->returntypeinstatements}你怎么知道(Self.Generator.Element)throws->Bool

swift - 将属性类型作为参数传递

有没有办法将属性作为参数传递给函数?classCar{letdoors:Int=4letprice:Int=1000}有没有办法将Car属性作为类型传递给函数?我想实现以下目标:funcf1(car:Car,property:SomeType){println(car.property)}letc1=Car()f1(c1,doors)f1(c1,price)闭包会有帮助吗?如果有的话如何? 最佳答案 我不确定这是你想要的,但是使用闭包:funcf1(car:Car,getter:Car->T){println(getter(car)