草庐IT

Closures

全部标签

closures - 为什么闭包中的 "unowned self"在 Swift 中不能正常工作?

Apple的Swift语言官方指南中的代码如下:classHTMLElement{letname:Stringlettext:String?@lazyvarasHTML:()->String={[unownedself]iniflettext=self.text{return"\(text)"}else{return""}}init(name:String,text:String?=nil){self.name=nameself.text=text}deinit{println("\(name)isbeingdeinitialized.")}}在闭包中使用带有unowned的捕获列表来

swift 4 : Escaping closures can only capture inout parameters explicitly by value

我一直在将我的代码从Swift2迁移到Swift4。我有以下代码在Swift2中运行良好:funcfetchUserThumbnailAvatar(_task:inoutURLSessionTask?,completion:@escaping(_image:UIImage?)->()){fetchUserAvatar(Session.currentUser?.avatar?.thumbnailURLasURL???URL(string:"")!,externalUrl:URL(string:thumbnailAvatar)??URL(string:"")!,&task,completi

ios - swift 3.1 : Cannot convert value of type '(_) -> ()' error/Problems with closures

我升级到Swift3.1,我收到了一些新错误,这些错误似乎是3.1语法问题,因为在迁移之前它们不是问题。它们大多与闭包有关,如本例所示:letalert=UIAlertController(title:"Success",message:"Thanksforparticipatinginourraffle!",preferredStyle:UIAlertControllerStyle.alert)alert.addAction(UIAlertAction(title:"OK",style:.default,handler:{performSegue(withIdentifier:"to

closures - 在 Swift 中调度闭包表达式

我希望能够安排在未来的绝对时间或相对时间运行闭包。我看到我可以使用NSTimer来安排稍后调用的选择器,但这不是我想要的。我更愿意看到这样的东西:lettimer=NSTimer.scheduleWithTimeInterval(ti:NSTimerInterval(1.0),action:{//dosomething})在Swift中是否有内置的方法来做这样的事情?编辑我现在遇到了dispatch_after这似乎更符合我想要的,但我对其他想法持开放态度。 最佳答案 dispatch_after应该是一个很好的解决方案,因为没有基

closures - 为什么 [weak self] 有效但 [unowned self] 在 Swift 闭包中中断?

此SpriteKitAction通过使用完成闭包调用自身来重复。它使用闭包,而不是SKAction.repeatActionForever(),因为它需要在每次重复时生成一个随机变量:classTwinkler:SKSpriteNode{init(){super.init(texture:nil,color:UIColor.whiteColor(),size:CGSize(width:10.0,height:10.0))twinkle()}functwinkle(){letrand0to1=CGFloat(arc4random())/CGFloat(UINT32_MAX)letacti

iOS Swift : Closures (Callbacks) versus Delegates, 什么时候使用哪个?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭6年前。Improvethisquestion就简单的逻辑关联而言,我个人更喜欢在Swift中使用回调而不是委托(delegate),因为它非常简单易懂。同时,有些人更喜欢委托(delegate),因为委托(delegate)是其他语言(例如C#)中的一种流行模式。网上有一些讨论:1。“为什么不应该在Swift中使用委托(delegate)?”https://medium.cobeisfresh.com/why-you-shouldn

closures - 你如何测试函数和闭包的相等性?

Thebooksaysthat"functionsandclosuresarereferencetypes".那么,如何确定引用是否相等?==和===不起作用。funca(){}letå=aletb=å===å//Couldnotfindanoverloadfor===thatacceptsthesuppliedarguments 最佳答案 ChrisLattner在开发者论坛上写道:Thisisafeatureweintentionallydonotwanttosupport.Thereareavarietyofthingstha

c# - C#中的 'closures'是什么?

这个问题在这里已经有了答案:关闭13年前。重复Closuresin.NETC#中的闭包是什么?

closures - 什么时候在 Go 中使用匿名函数?

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter为指导。8年前关闭。Go支持匿名函数/闭包,这让我想起了Python中的Lambda,什么时候在你的代码中使用它们是理想的? 最佳答案 jnml已经给出了匿名函数有用的情况之一。我要补充的是,当您只需要传递一个不会在其他地方调用的函数时,您可以使用它们:Goroutine启动:gofunc(){...}()将一些代码传递给函

database - golang 和 boltdb : using closures to wrap a bucket ForEach function

在我的代码中,我使用了很多重复代码来迭代bolddb数据库中的嵌套桶。我想做一些重构,将这些重复的代码包装成新的函数。我知道我需要为此使用闭包,但是额外的db.View层让我很头疼。更准确地说,我想将bucket.ForEach函数包装成一个新函数。该函数创建数据库的View事务,选择嵌套的存储桶并返回一个新函数,让我可以遍历给定的存储桶。新创建的代码的代码签名是这样的:ForEachBucket(bucket_namestring,*bolt.DB)func(){}我要包装的代码:funcForEachBucket(bucketnamestring,db*bolt.DB){db.Vi