草庐IT

weak-template-vtables

全部标签

swift - 如何在 curried 函数中指定 `weak` self

我有一个UIViewController,它在其属性之一上调用异步函数。对于回调,我想提供一个具有正确参数类型的函数,而不是闭包。classFetcher{funcfetch(completion:([String]->())){//...dostuffcompletion([...])}}classViewController:UIViewController{letfetcher=Fetcher()funcfetch(){fetcher.fetch(didFetch)}funcdidFetch(result:[String]){//handleresult}}一切正常,除了两个对象

ios - 为什么会有弱者和无主?为什么我们不能总是使用 weak?

我刚刚阅读了ARCsectionintheSwiftbook以及其他一些关于weak和unowned引用的相关文章。在阅读之后,我确实清楚地了解了它们是什么以及它们各自在什么情况下使用(另请参阅thisSOpost对此给出了很好的解释)。但是,我无法理解为什么Apple甚至想出了这两种解决方案?本质上,从MM的角度来看,两者都归结为不创建对引用对象的强引用(即不增加其retainCount)。那么,为什么还要在这里提供两个MM原语呢?现在,开发人员需要了解何时使用两者中的哪一个,Apple在解释不同场景方面做得很好,但他们没有说明原因。难道不是更简单吗?仅提供weak,以便开发人员无需

Swift:元组中的 `weak` 引用

是否可以在Swift4中创建具有弱引用的元组?像这样:letx:(name:weakMyClass,name2:weakMyClass2) 最佳答案 首先,弱变量必须是可选的。其次,正如@Hamish在评论中所说,您不能将元组字段定义为弱字段。解决方法但是,如果你真的想使用元组,这里有一个解决方法第1步让我们定义一个对其内部对象有弱引用的包装器structWeakWrapper{weakvarvalue:Element?init(_value:Element){self.value=value}}第2步您的2个类(class)cla

ios - 为什么 Xcode 不让 outlets unowned 而不是 weak?

Xcode将outlet生成为具有隐式展开的弱变量,如下所示:@IBOutletweakvarnameTextField:UITextField!我想知道为什么它不只是生成onownedvar,据我所知-行为完全相同,但保持类型非可选。这两者有什么区别吗?weakvarfoo:UITextField!unownedvarfoo:UITextField 最佳答案 weak变量有一个默认值,即nil,因此您的代码是合法的,因为outlet属性在对象创建时(之前socket实际上已连接)。但是unowned变量没有默认值,您的代码将无法编

ios - 如果我使用单例网络服务发出网络请求,是否需要使用 [weak self]?

假设我有一个使用Alamofire的SessionManager的网络单例,如下所示:导入AlamofireclassNetwork{staticletshared=Network()privateinit(){}privatevarsessionManager:SessionManager={letconfiguration=URLSessionConfiguration.defaultconfiguration.httpAdditionalHeaders=SessionManager.defaultHTTPHeadersreturnSessionManager(configurat

swift - 可以使用 weak 为什么要使用 unowned?

这个问题在这里已经有了答案:Whatisthedifferencebetweenaweakreferenceandanunownedreference?(7个答案)关闭8年前。在Swift中,可以选择使用unowned或weak。当可以使用weak时,为什么要使用unowned?看起来两者几乎相同,weak更安全。

ios - 如何在 objc_weak_error 上设置中断

在我的应用程序中,我有时会收到此错误:objc[3899]:__weakvariableat0x610000056bd0holds0x10003insteadof0x610000302640.Thisisprobablyincorrectuseofobjc_storeWeak()andobjc_loadWeak().Breakonobjc_weak_errortodebug.如何在“objc_weak_error”上设置中断。我应该这样设置吗?可能不是,我试过带引号和不带引号。因为当错误发生时我没有休息,所以有些事情是不对的。 最佳答案

Swift 协议(protocol)错误 : 'weak' cannot be applied to non-class type

Protocols和class-boundProtocols有什么区别,我们应该在Swift中使用哪一个?protocolA:class{...}protocolA{...}当协议(protocol)未定义为:class时尝试添加weak委托(delegate)时出现错误:protocolA{...}weakvardelegate:A给出错误:'weak'cannotbeappliedtonon-classtype或'weak'mustnotbeappliedtonon-class-bound'A';consideraddingaprotocolconformancethathasac

xcode - iOS8.0 的 CompileSwift 状态为 "the current deployment target does not support automated __weak references"

我正努力在Swift应用程序中使用静态库(从ObjectiveC编译)。我有一个包含相关header的ObjectiveC桥接header。构建应用程序时出现此错误../someDirectory/Xcode/FirstSteps/headers/Acme.h:89:thecurrentdeploymenttargetdoesnotsupportautomated__weakreferencesAcme类确实使用弱引用,但部署目标是iOS8.0,它应该支持它们。我是不是找错树了?Acme.h的第89行显示:-(void)addTopicListener:(__weakNSObject*

Swift:如何支持 "template method"设计模式(因为 Swift 没有保护)?

传统上,在“模板方法”模式中,基类实现一些算法,并为特定行为遵从派生类。这在C++/C#/Java等语言中效果很好,因为您可以在这些方法上使用“protected”来对调用者隐藏它们,但对派生类保持可见。例如,在GoF书中,你有这样的东西:classApplication{voidCreateDocument(){...,this->DoCreateDocument()}protectedvoidDoCreateDocument(){}//overrideforcustombehavior}这使Application的公共(public)接口(interface)保持干净。在Swift