【问题标题】:SwiftUI Coordinator: method can not be marked @objcSwiftUI Coordinator:方法无法标记@objc
【发布时间】:2021-02-10 22:28:02
【问题描述】:

SwiftUI 中使用 UIViewController 我需要为两个按钮分配选择器。那些需要是@objc,但我得到了错误:

无法将方法标记为@objc,因为在Objective-C中无法表示参数的类型

struct ScanPreView: UIViewControllerRepresentable {

    class Coordinator: NSObject {
        
        var parent: ScanPreView
        
        init(_ parent: ScanPreView) {
            self.parent = parent
        }
        
        @objc func dismissPreviewedScanTapped(sender: ScanPreView) {
            
        }
        
        @objc func savePreviewedSceneTapped(sender: ScanPreView) {
            
        }
    }
        
    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }
    
    func makeUIViewController(context: Context) -> ScenePreviewViewController {
        let preview = ScenePreviewViewController(pointCloud: pointCloud, meshTexturing: meshTexturing, landmarks: nil)
        preview.leftButton.addTarget(context.coordinator, action: #selector(Coordinator.dismissPreviewedScanTapped(sender:)), for: UIControl.Event.touchUpInside)
        preview.rightButton.addTarget(context.coordinator, action: #selector(Coordinator.savePreviewedSceneTapped(sender:)), for: UIControl.Event.touchUpInside)
        return preview
    }
}

【问题讨论】:

标签: objective-c swift swiftui uiviewcontrollerrepresentable


【解决方案1】:

你不需要在那里查看,所以如果你需要动作签名,只需使用 Any,比如

@objc func dismissPreviewedScanTapped(sender: Any) {
    
}

【讨论】:

  • 因为swift structs不能暴露给objC,一个简单易行的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
  • 2020-11-10
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 2022-12-14
相关资源
最近更新 更多