草庐IT

Closures

全部标签

Swift presentViewController 完成 block 仅在调试中工作,未在发布中调用

我在Debug和Release中有一个完成block的奇怪行为。例如:sourceViewController.presentViewController(ccVC,animated:true,completion:{()->VoidinNSUserDefaults.standardUserDefaults().setBool(true,forKey:kChromeCastInstructionsShown)NSUserDefaults.standardUserDefaults().synchronize()println("savebolean")})调试中:println("保存b

swift - 如何在 Swift 的异步 block 中使用@autoclosure 参数?

我想在dispatch_asyncblock中调用一个@autoclosure参数。funcmyFunc(@autoclosurecondition:()->Bool){dispatch_async(dispatch_get_main_queue()){ifcondition(){println("Conditionistrue")}}}我收到以下错误。Closureuseof@noescapeparametermayallowittoescape.是否可以异步调用@autoclosure参数?在Xcode6.4(6E23)中测试。 最佳答案

在闭包中使用数组时的 Swift EXC_BAD_ACCESS

考虑以下玩具示例Swift代码:protocolTestable{}classMyObj:Testable{}classTest{vararr:[Testable]=[]vardidRun:Bool=falsefuncrun()->[Testable]{if(didRun){println("arrhas\(arr.count)elements")foreinarr{//followingaccesscausesEXC_BAD_ACCESSprintln(e)}returnarr}else{provider({(myArr:[AnyObject])->()inself.arr=myAr

api - swift 中具有多个闭包/API 请求的函数中的异步完成处理

我刚开始使用Swift进行开发,所以我对闭包完全陌生。我还不知道如何处理异步API请求。我读过很多类似的问题,例如HowtogetdatatoreturnfromNSURLSessionDataTaskinSwift和HowtousecompletionHandlerClosurewithreturninSwift?.这些对我有帮助,但我的问题有点不同。在我的函数中,我想首先发出API请求以获取JSON负载。有了这个JSON负载中的一些数据,我想发出多个其他API请求。在这种情况下,我将为每个API请求接收一个JSON负载,我想在其中将一些数据存储在我自己的JSON数据结构中。问题是,

swift - 如何知道闭包是否归类所有?

我很难弄清楚如何确定何时在闭包主体中使用[weakself]/[unownedself]。在下面显示的两个场景中,根据我的说法,这取决于B类是否拥有传递的闭包。现在如果B类的实现被隐藏我不太确定如何决定使用[弱自我]/[无主自我]。有人可以帮我理解你将如何决定吗?/********Scenario1**********/classA{varb:B?letp="SomePropertyofA"init(){print("InitofA")self.b=B(closure:{(number)->Voidinprint(self.p)//capturingselfbutstillnoneed

ios - 取消完成 block

快速提问。通常,我们进行网络调用并在获得响应时,我们在完成block中返回数据,如下所示funcsomeAPIcall(input:input,completion:(result:data)->Void){...completion(data)}我使用下面的函数someAPIcall(input){(result:data)inprint(result)//UpdateUI,etc}是否有可能在以后的任何时间点以某种方式取消完成block?比如说,如果我立即进行网络调用和popViewController,尽管如果我取消request,但如果数据返回到完成block,则会执行完成任务

swift - 等到异步 api 调用完成 - Swift/IOS

我正在开发一个ios应用程序,在我的appDelegate中我有:funcapplication(application:UIApplication!,didFinishLaunchingWithOptionslaunchOptions:NSDictionary!)->Bool{self.api.signInWithToken(emailstring,token:authtokenstring){(object:AnyObject?,error:String?)inif(object!=nil){self.user=objectas?User//gostraighttothehomev

ios - 闭包语法中的 Swift weak Self

我有这段代码来获取JSON:Alamofire.request(.GET,worlds).responseJSON{(request,response,JSON,error)inprintln(JSON)//weakSelf.serverList=JSON}如何在这里声明weakSelf?我知道在我的情况下它应该是无主的,但我找不到正确的语法。当我尝试使用[unownedself].serverList而不是注释行时,编译器显示错误“使用未解析的标识符‘unowned’”。我也试过像这样在block之前声明常量:unownedletuSelf=self它就像一个魅力,但我想了解如何在我

swift - 在异步网络请求中捕获 self weak 或 unowned

每当我执行异步网络请求时,可能是在请求到达时self已经为nil(例如,ViewController已经被关闭)。为了防止这种情况,我通常将自己描述为软弱的:future.onSuccess(context:Queue.main.context,callback:{[weakself]resultinifletstrongSelf=self{//Dosomestuffwithself,whichisnowguaranteedtobenotnil//strongSelf.someMethod()}})或者我可以将self捕捉为无主:future.onSuccess(context:Que

swift - 在闭包中解构元组的元组

我可以轻松地解构元组的元组:lettt=(2,(3,4))let(a,(b,c))=ttb//=>3我想在声明闭包时做同样的事情,例如我认为我可以写:[tt].map{(a,(b,c))in//Useb}Xcode提示“未命名的参数必须用空名称写入”。我让它“工作”的唯一方法是:[tt].map{(a,tuple:(b:Int,c:Int))in//Usetuple.b}这有两个我想避免的缺点:我需要使用tuple.b而不是b我需要指定b和c的类型顺便说一句,我的用例是我想用索引做一个reduce,所以我正在尝试使用array.enumerate().reduce