草庐IT

swift - 闭包中的弱 self 和后果示例

我对stackoverflow和苹果关于ARC和Weak/Unownedself(Shallwealwaysuse[unownedself]insideclosureinSwift)的文档做了一些研究。我了解了关于强引用循环的基本概念,以及它是如何不好的,因为它们会导致内存泄漏。但是,我想弄明白什么时候在闭包中使用Wea​​k/Unownedself。而不是进入“理论”,我认为如果有人可以根据我所拥有的最后三个案例友好地解释它们,那将真的很有帮助。我的问题是是否可以将weakself放入其中(我认为对于第二种情况没有必要,因为我在某处看到UIView与self无关?但是,如果我将wea

swift - 闭包返回值(以前的 completionBlock)

我想在长期操作完成后返回一些值。但此外,我想拆分逻辑和图形用户界面。例如;我有两个类(class)SomeServices.swift有一个名为“getDataFromService...”的方法MyTableViewController.swift将显示“getDataFromService”的结果因此,之前在Objective-C中,我只是在SomeServices中添加了一个方法,如下所示:(void)getDataFromService:(void(^)(NSArray*,NSError*))completionBlock{......}在这个方法中,我刚刚调用了complet

ios - 在闭包之外使用 "self"是否有实际好处?

我注意到业内一些人会使用self关键字,即使没有明确要求(即在闭包之外)。示例:importUIKitimportMapViewimportCoreLocationclassviewController:UIViewController,MKMapViewDelegate,CLLocationDelegate{letmapView=MKMapView()letlocationManager=CLLocationManager()overridefuncviewDidLoad(){super.viewDidLoad()self.mapView.delegate=selfself.mapV

swift - 闭包如何从之前的调用中捕获值?

typealiasIntMaker=(Void)->IntfuncmakeCounter()->IntMaker{varn=0//LineAfuncadder()->Integer{n=n+1returnn}returnadder}letcounter1=makeCounter()counter1()//returns1counter1()//returns2counter1()//returns3不是每次我们调用counter1()时都会调用“LineA”吗?这意味着varn=0应该每次都被调用......为什么计数器返回不同的值?他们不应该总是返回“1”吗?

swift - 在 Swift 中访问闭包中的参数数量

假设我有一个函数:functest(closure:(closureArgs:Double...)->Double){//somelogic}然后,我调用它:test({$0+$1+$2+$3})是否可以获取test中提供的closureArgs的数量?目标是做重载。例如,test可以包含如下代码:functest(closure:(closureArgs:Double...)->Double){//somehowgetaccesstonumberofargumentsinclosureArgswithintheclosurethatwaspassed.}澄清一下——我的意思是我需要在

swift - 为什么我不能在带有可变匿名参数的单行 Swift 闭包中使用 .reduce()?

第一个闭包有效。但是,一旦我取出虚拟分配,闭包就会停止工作(addUpClosureRedFlagged)。谁知道为什么?letaddUpClosureWorking:(Int...)->Int={letdummy="Anything"//Commentoutandwaitfortheerror...return$0.reduce(0,combine:+)}letaddUpClosureRedFlagged:(Int...)->Int={return$0.reduce(0,combine:+)//Shouldwork,butdoesn't!}addUpClosureWorking(1,

swift - 为什么迭代闭包会导致 swift 出现总线错误?

在运行看起来非常安全的swift代码时,我遇到了一个奇怪的BusError。我试图将其简化为最小的测试用例,如下所示:AppleSwiftversion2.2-dev(LLVM3ebdbb2c7e,Clangf66c5bb67b,Swift0ddf238ad7)Target:x86_64-apple-macosx10.9这段代码:publicenumMyError:ErrorType{caseSomeError(code:Int)}publictypealiasMyType=()throws->BoolpublicclassFoo{vara:MyType={()throws->Bool

swift - “self”在所有成员初始化之前被闭包捕获

好吧,下面是我的代码:importUIKitimportForecastIOclassWeather{vartemp:Floatvarcondition:Stringvarwind:Floatvarprecip:Floatinit(){DarkSkyClient(apiKey:"").getForecast(latitude:Utils().getLat(),longitude:Utils().getLong()){resultinswitchresult{case.success(letcurrentForecast,_):self.temp=(currentForecast.cur

swift - 按名称删除使用闭包语法创建的 NotificationCenter 观察器是否足够?

我有一些使用block/尾随闭包语法创建的通知,如下所示:NotificationCenter.default.addObserver(forName:.NSManagedObjectContextObjectsDidChange,object:moc,queue:nil){notein//implementation}我后来按名称删除了它,如下所示:NotificationCenter.default.removeObserver(self,name:NSNotification.Name.NSManagedObjectContextObjectsDidChange,object:m

swift - 内部闭包的捕获列表是否需要将 `self` 重新声明为 `weak` 或 `unowned`?

如果我有一个闭包传递给这样的函数:someFunctionWithTrailingClosure{[weakself]inanotherFunctionWithTrailingClosure{[weakself]inself?.doSomething()}}如果我在someFunctionWithTrailingClosure的捕获列表中将self声明为[weakself]而没有在捕获列表中再次将其重新声明为weakanotherFunctionWithTrailingClosureself已经变成了Optional类型,但它是否也变成了weak引用?谢谢!