草庐IT

ios - 从 Swift 中的闭包返回方法的值

有没有一种方法可以让我从闭包中为shouldPerformSegueWithIdentifier方法返回值?或者我应该采取不同的方式吗?overridefuncshouldPerformSegueWithIdentifier(identifier:String?,sender:AnyObject?)->Bool{getDataFromSomewhere(){succeeded,datainifsucceeded{//Shouldreturntruehere}else{self.errorAlert("Error",message:"Can'tgetdata...")//Shouldre

iphone - 令人困惑的闭包和完成句柄

我是一名新程序员,很迷茫。我正在参加这个在线iOS开发类(class),我正在配置CollectionView单元格。但是,使用了闭包和完成句柄,之前从未提及。importUIKitclassPersonCell:UICollectionViewCell{@IBOutletweakvarimg:UIImageView!funcconfigureCell(imgUrl:String){ifleturl=NSURL(string:imgUrl){downloadImg(url)}}funcdownloadImg(url:NSURL){getDataFromURL(url){(data,re

Swift 表示保留一个闭包参数

有什么方法可以向特定方法的“客户”指示将保留闭包参数吗?例如,有以下代码:importFoundationtypealiasMyClosureType=()->VoidfinalclassMyClass{privatevarmyClosure:MyClosureType?funcwhatever(closure:MyClosureType?){myClosure=closure}}任何人都可以开始使用这个类并将闭包传递给方法whatever而不知道它是否真的被保留了。这很容易出错,并可能导致内存泄漏。例如,一个“客户”做这样的事情,永远不会被释放finalclassMyDummyCli

swift - 在序列中使用闭包作为 'state'(状态 :next:): function mis-use or Swift limitation?

背景我们可以使用闭包作为inout参数:funcmutate(_closure:inout()->Int){letnum=closure()closure={return2*num}}varclosure:()->Int={return21}print(closure())//21mutate(&closure)print(closure())//42问题但是,当我尝试使用闭包作为全局sequence(state:next:)function中的(初始)state参数时,系统提示我出现了一些奇怪的错误(与通常的“公共(public)错误”不同)和堆栈跟踪。//dummyexamplen

iOS:CloudKit perform(query:) 什么都不做 - 闭包未执行

我正在将CloudKit添加到我的应用程序以启用iCloud同步。但是我的方法遇到了问题,该方法在私有(private)数据库上使用perform方法执行查询。我的方法运行良好,然后我更改了一些相关方法(只是检查iCloud是否可用),突然我的执行方法什么也没做。我的意思是perform(query:)闭包中没有任何内容被执行。我在第一行有断点,在下一行有其他断点,但从未设法击中它们。privatestaticfuncgetAppDetailsFromCloud(completion:@escaping(_appDetails:[CloudAppDetails]?)->Void){va

swift - 一种带有 {}() 的无体闭包?

我看到了可以包含任意数量语句的变量初始化代码示例,例如:var_globalCounter=0letinstanceCount:Int={_globalCounter++}()print(instanceCount.dynamicType)//Int和完整的代码示例:structUser{letname:Stringletcompany:Stringletlogin:Stringletpassword:Stringstaticletdatabase:Dictionary={vartheDatabase=Dictionary()foruserin[User(name:"JohnApple

swift - 为什么速记参数名称在这个 Swift 闭包中不起作用?

这是一个接受两个整数和一个三参数函数的Swift函数,并调用传入的函数。funcp(x:Int,_y:Int,_f:(Int,Int,Int)->()){f(x,y,0)}我可以使用尾随闭包语法和速记参数名称来调用它,没问题:>p(1,2){print($0+$1+$2)}3这按预期工作。但是在Foundation库中,有一个名为enumerateSubstringsInRange的字符串方法,定义如下:funcenumerateSubstringsInRange(_range:Range,optionsopts:NSStringEnumerationOptions,_body:(su

swift - 如何在 swift 中使用可变闭包?

在Swift的闭包中是否有正确的方法来使用可变参数列表?很快我注意到我可以像这样声明一个带有可变参数列表的函数protocolNumberType:Comparable,IntegerLiteralConvertible,IntegerArithmeticType{}extensionInt:NumberType{}extensionSequenceTypewhereGenerator.Element:NumberType{funcsatisfy(closure:(args:Generator.Element...)->()){//Dosomethingclosure(args:1,2

swift - 在闭包中捕获结构引用不允许发生突变

我想看看我是否可以为我的模型使用结构体,并且正在尝试这个。当我调用vm.testClosure()时,它不会更改x的值,我不确定为什么。structModel{varx=10.0}varm=Model()classViewModel{lettestClosure:()->()init(inoutmodel:Model){testClosure={()->()inmodel.x=30.5}}}varvm=ViewModel(model:&m)m.xvm.testClosure()m.x 最佳答案 inout参数不是对值类型的引用——它

Swift - 从闭包中退出外部函数

在Kotlin中,您可以从闭包的外部函数返回。funmain(args:Array){valletters=listOf("A","B","C")funlookForLetter(letter:String,letters:List){letters.forEach{l->if(l==letter){println("Found")return}println(l)}println("Completed")}lookForLetter("A",letters=letters)}输出:找到在Swift中,return退出闭包的执行varletters=["A","B","C"]funcl