草庐IT

Closures

全部标签

ios - 为什么 Swift 全局函数作为闭包捕获全局变量的特例?

根据AppleSwiftdocumentation:全局函数是具有名称且不捕获任何值的闭包。但我在IOS11ProgrammingFundamentalswithSwift一书中遇到了一个说明闭包使用的示例,它将一个global函数A作为参数传递给另一个全局函数B以进行修改全局变量x的值。该书指出A捕获X,这与Swift文档所说的相矛盾。代码示例:funcpass100(_f:(Int)->()){f(100)}varx=0print(x)//output0funcsetX(newX:Int){x=newX}pass100(setX)print(x)//output100上面的代码片段

swift - 将 [unowned self] 添加到闭包参数 Swift

我有一个带有完成处理程序的函数,返回一个或多个参数。在客户端中,当执行完成处理程序时,我希望有一个unowned对self的引用,以及对传递的参数的访问权。这是说明问题和我要实现的目标的Playground示例。importUIKitstructStruct{funcfunction(completion:(String)->()){completion("Boom!")}funcnoArgumentsFunction(completion:()->Void){completion()}}classClass2{funcexecute(){Struct().noArgumentsFun

swift - 有没有办法在不测试的情况下运行闭包?

我在类里面经常使用这个方案typealiasnullHandle=()->VoidvarrunOnLoad:nullHandle?因此,当我创建该类的实例时,我会...letobject=MyClass()object.runOnLoad={()->Voidin//dosomething}在类里面,我总是必须在运行闭包之前执行此操作:ifself.runOnLoad!=nil{self.runOnLoad()!}因为我不能保证runOnLoad不为nil,如果我尝试运行nilrunOnLoad它会崩溃。在使用Objective-C编程一个世纪之后,我才开始接触Swift。我在swift

swift - 如何在 Swift 中创建具有两个闭包作为参数的函数?

我需要将这样的函数从Objective-C翻译成Swift语言。但是找不到示例,也不知道如何在Swift中将2个闭包发送到func。例如,Objective-C中的原始函数:-(void)getForDemoDataWithToken:(Token*)tokenonSuccess:(void(^)(NSArray*demoData))successonFailure:(void(^)(NSError*error))failure{}我知道发送1个闭包作为参数:getForDemoDataWithToken(token){(success:String)->Voidin//somecod

arrays - 平面嵌套对象的闭包?

我开始学习闭包,并想在我正在从事的项目中实现它们,我需要一些帮助。我有一个定义如下的类:classMyObject{varname:String?vartype:String?varsubObjects:[MyObject]?}我想使用闭包或更高级的函数(想到类似flatMap的东西)来展平[MyObject]并加入所有MyObject和subOjects到一个数组中。我已经尝试使用[MyObject].flatMap()但此操作不会返回嵌套的子对象。 最佳答案 首先,我强烈建议将subObjects的类型设为非可选。很少有使用可选

ios - 在 Swift 中链接多个异步函数

我正在尝试编写一系列函数来验证用户的信息,然后再要求他们确认某些内容。(想象一下购物应用程序)。我首先必须检查用户是否添加了卡片。然后我必须检查他们是否有足够的余额。然后我可以让他们确认付款。我可以编写异步方法来检查卡...funccheckHasCard(completion:(Bool)->()){//gototheinterwebs//getthecard//processdatalethasCard:Bool=//theuserhasacardornot.completion(hasCard)}这可以像这样运行...checkHasCard{hasCardinifhasCard

swift - 在 Swift 中使用闭包从函数中检索字符串值

我正在尝试从Firebase检索一个字符串值,以便让每个用户名都具有传递给函数的唯一UID,该函数返回用户的用户名。但是-由于firebaseObserveEvent在closures中,我无法返回任何值,因为操作是异步(?)。我想知道这是否是一种实现此目的的方法?函数如下所示:funcGetUsername(uid:String)->String{varusername=String()firebase.child("Users").child(uid).observeSingleEventOfType(.Value){(snapshot:FIRDataSnapshot)inuser

swift - 有人可以用 Swift 解释这个 "stop in"语法吗?

self.enumerateChildNodesWithName(spriteName){node,stopin//Dosomethingwithnode.这是我查看的一些SpriteKitSwift代码的示例。它看起来像是C#的lambda表达式,但我不确定。我想了解的部分是stopin部分,它是什么?我尝试在Swift文档中查找信息,但是stopin这个词太笼统了,找不到任何信息。什么是停止?它在做什么? 最佳答案 方法声明为:funcenumerateChildNodesWithName(_name:String,usingB

variables - swift 闭包作为变量存储和访问

我想像以前在Objective-C中那样在swift项目中实现回调我需要一个闭包类型的变量。该闭包应将一个对象作为参数并且不返回任何内容。vardownloadCompleted:(MLBook)->(Void)!当我需要触发回调时,我会这样做:ifself.downloadCompleted{self.downloadCompleted(book)}编译器提示此错误消息:Type'(MLBook)->(Void)!'doesnotconformtoprotocol'BooleanType'如果我删除if语句,编译器会说:Property'self.downloadCompleted'

swift - Swift 中 auto 和 escaping 闭包的区别和目的是什么?

我正在寻找Swift中自动闭包和转义闭包的一些区别/目的。我很清楚转义闭包是我们想要在函数返回后执行的东西,但我没有得到自动闭包的概​​念。 最佳答案 Ididn'tgettheconceptofautoclosureclosure.autoclosure允许函数将表达式包装在闭包中,以便稍后执行或根本不执行。使用自动关闭的一个很好的例子是short-circuit||发生的行为。考虑这个例子:funcwillCrash()->Bool{fatalError()returntrue}letgood=trueifgood||willC