Dee*_*rma 21 xcode crash-reports ios swift swiftui
我试图理解此崩溃报告,但无法理解,因为函数“applySettings()”不是从 init() 调用的,如崩溃报告中所示。Swift 中的“部分申请closure#1”是什么?
这是 init() 函数所需的代码。
public override init()
{
super.init()
discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [AVCaptureDevice.DeviceType.builtInWideAngleCamera, AVCaptureDevice.DeviceType.builtInDualCamera, AVCaptureDevice.DeviceType.builtInTelephotoCamera, AVCaptureDevice.DeviceType.builtInDualWideCamera,
AVCaptureDevice.DeviceType.builtInTripleCamera,
AVCaptureDevice.DeviceType.builtInUltraWideCamera], mediaType: AVMediaType.video, position: .unspecified)
detectLenses()
checkForDeviceAuthorization()
setZoomParams()
sessionQueue.async { [unowned self] in
self.configureSession()
}
}
Run Code Online (Sandbox Code Playgroud)
Asp*_*eri 12
@丹尼尔卡普兰
我正在寻找标题的答案(就像OP一样),而不是堆栈跟踪的原因。答案必须解释“部分申请关闭#1”的含义。
那么这是怎么回事呢?
sessionQueue.async { [unowned self] in
self.configureSession()
}
Run Code Online (Sandbox Code Playgroud)
这里我们直接闭包调用函数,Swift 编译器会识别这一点并进行柯里化,即。不是调用函数的函数,而是解包闭包并注入到async内部函数的直接调用中,例如
sessionQueue.async(execute: CapturePipeline.configureSession(self))
Run Code Online (Sandbox Code Playgroud)
但是将其与源代码调试信息结合起来应该保留有关此简化的信息,因此他们将其标记为部分应用闭包#(其中 N 只是父函数中现有闭包的有序数量)。
要修复该崩溃,如前所述,最好的方法是init完全删除该部分并在创建完成后调用。更糟糕的是使用[weak self].
你不能在init. 我们试图返回初始化的对象;这就是你应该在这里做的一切。当完全存在时,其他所有事情都应该在后续配置调用中发生self。
| 归档时间: |
|
| 查看次数: |
11832 次 |
| 最近记录: |