草庐IT

swift - swift 可以退出 root 闭包吗?

在Swift中,如果我在一个闭包内,它本身在另一个函数内,有没有办法退出函数本身?这是一个使用GCDKit库中的闭包的示例。functest(){GCDQueue.Default.async{print("Printme!")return//Isthereastatementthatdoesthis?}.notify(.Main){print("Neverprintme.")}} 最佳答案 不,没有。闭包在独立的环境中运行。如您所知,在执行闭包时,调用test()的线程不再执行test()方法。

ios - 在 Swift 2.2 中呈现弹出窗口时在闭包错误中隐式使用 'self'

如果用户成功重置密码,我会尝试将ViewController呈现为弹出窗口。基本上,如果通过电子邮件发送密码重置说明电子邮件一切正常,那么将运行以下代码。但是,我收到了错误闭包中“self”的隐式用户;使用“.self”使捕获语义明确在下面的第一行:letVC=storyboard?.instantiateViewControllerWithIdentifier("ResetPasswordSuccessPopOver")as!ResetPasswordSuccessPopOverViewControllerVC.preferredContentSize=CGSize(width:UI

swift - 如何使用 Swift > 2.2 表示闭包中的可变参数?

也许这是一个Xcode8beta问题,但是,在2.2之前,允许var关键字在函数签名中添加参数:func(varstringName:String){...}这已经被弃用,因为它比inout没有什么好处func(stringName:inoutString){...}我在map闭包中尝试了以下操作,虽然我没有收到我应该温和预期的弃用警告,但错误是段错误:11letdemoString=["hi","there","world"].map{(varword)->StringinletfirstChar=word.remove(at:word.startIndex)}一旦我尝试改变(假设可

swift - 在初始化闭包中访问 "self"

在Swift3中,dispatch_once函数被移除,migrationguide建议使用初始化闭包:letmyGlobal={…globalcontainsinitializationinacalltoaclosure…}()_=myGlobal//usingmyGlobalwillinvoketheinitializationcodeonlythefirsttimeitisused.我想像这样从初始化闭包中访问“self”实例变量:classSomeClass{varother=SomeOtherClass()letinitialize:()={//self.other-this

ios - 将闭包作为参数传递给单例时的 Swift 内存管理

我知道closure可以创建retaincycles如果它被分配给一个类的属性并且该类的实例属性在内部使用关闭。但是1)闭包没有分配给类属性而是作为参数传递给单例的类方法怎么办?2)在这种情况下如何管理内存?在我的Controller(UIViewController)的方法中,我有类似的东西:MySingleton.classMethod(parameters...,completion:{()->Voidin/**doingstuffhere*/}) 最佳答案 如果您没有将闭包分配给一个属性,而只是将其传递给一个函数,您需要考虑

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 - NSKeyValueObservation observe() 闭包中是否需要弱 self ?

我有:privatevarstatusLabel:UILabel!privatevarerrorObserver:NSKeyValueObservation?self.errorObserver=self.viewModel.observe(\.errorString){[weakself](viewModel,change)inself?.statusLabel.text=viewModel.errorString}这里需要[weakself]吗? 最佳答案 简短回答:是的,您确实需要[weakself]。不必在deinit中显式

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