【问题标题】:Swift closure "partial apply forwarder"Swift 关闭“部分应用转发器”
【发布时间】:2017-11-09 19:08:55
【问题描述】:

我进行了快速测试,并试图将闭包作为函数参数传递,但请注意某种“异常”。应用程序没有崩溃,但有问题的行会生成崩溃报告。

视图控制器

import UIKit

class MapViewController: UIViewController {

    typealias MapTouchHandler = (String) -> Void

    var mapTouchHandlers = Array<MapTouchHandler>()

    @IBAction func tapGestureAction(_ sender: UITapGestureRecognizer) {
            for handler in mapTouchHandlers {

                // This line produces this: "0x000000010c8f8a00 Mediator`partial apply forwarder for reabstraction thunk helper from @callee_owned (@in Swift.String) -> (@out ()) to @callee_owned (@owned Swift.String) -> () at MapViewController.swift"

                handler("tap recognized")
            }

    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }



     func subscribeMapTouchEvent(mapTouchHandler: @escaping MapTouchHandler) {

           // This line produce this: "0x000000010c8ff910 Mediator`partial apply forwarder with unmangled suffix ".16" at Mediator.swift"

            mapTouchHandlers.append(mapTouchHandler)
    }
}

中介类

import UIKit

class Mediator {

    var mapViewController: MapViewController? {
        didSet {
            mapViewController?.subscribeMapTouchEvent(mapTouchHandler: self.handleTouchEvent(str:))
        }
    }

    private func handleTouchEvent(str: String) {
        print(str)
    }
}

感谢任何解决此问题的见解。

【问题讨论】:

  • 应用程序是否崩溃?
  • 应用不会崩溃
  • 那么“生成崩溃报告的违规行”是什么意思?它是编译器错误/警告、运行时错误/警告还是什么?
  • 我也有点失落,应用程序没有崩溃,但在曲棍球应用程序中它正在生成崩溃报告:Thread 0 Crashed: partial apply forwarder for reabstraction thunk helper from @callee_owned (@unowned __C.CGPoint, @owned [__ObjC.MGLFeature]) -&gt; () to @callee_owned (@in (__C.CGPoint, [__ObjC.MGLFeature])) -&gt; (@out ()) (MapViewController.swift:0)
  • 如果我在mapTouchHandlers.append(mapTouchHandler) 上设置断点,在调试器中我可以看到mapTouchHandler = (() -&gt; () 0x000000010ee7a910 Mediator partial apply forwarder with unmangled suffix ".16" at Mediator.swifthandler("tap recognized") 上的断点显示 handler = (() -&gt; ()) 0x000000010ee73a00 Mediator partial apply forwarder for reabstraction thunk helper from @callee_owned (@in Swift.String) -&gt; (@out ()) to @callee_owned (@owned Swift.String) -&gt; () at MapViewController.swift

标签: ios swift


【解决方案1】:

Apple Developer Forum查看此问答。给你的提示:找到可能是nil的变量并且与Objective-C代码有关。我修复了我的错误。祝你好运!

【讨论】:

    【解决方案2】:

    如果你在一个块中引用“self”,我建议你使用weak self,这样可以避免保留循环、内存泄漏和崩溃。

    例子,

    getAsynchronousData { [weak self] data in
        guard let self = self else { return }
    
        self.yourProperty = data 
    } 
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 2013-02-15
    • 1970-01-01
    • 2018-02-12
    • 2011-03-07
    • 1970-01-01
    相关资源
    最近更新 更多