导入SwiftUI时,如何使NSView与CALayerDelegate保持一致?

导入SwiftUI时,如何使NSView与CALayerDelegate保持一致?,calayer,swiftui,nsview,appkit,Calayer,Swiftui,Nsview,Appkit,这包括: import AppKit class CustomView: NSView, CALayerDelegate { func layoutSublayers(of layer: CALayer) {} } 然而,这并不意味着: import AppKit import SwiftUI class CustomView: NSView, CALayerDelegate { func layoutSublayers(of layer: CALayer) {} } 这

这包括:

import AppKit

class CustomView: NSView, CALayerDelegate {
    func layoutSublayers(of layer: CALayer) {}
}
然而,这并不意味着:

import AppKit
import SwiftUI

class CustomView: NSView, CALayerDelegate {
    func layoutSublayers(of layer: CALayer) {}
}
这是一个错误:

... error: redundant conformance of 'CustomView' to protocol 'CALayerDelegate'
class CustomView: NSView, CALayerDelegate {}
                          ^
... note: 'CustomView' inherits conformance to protocol 'CALayerDelegate' from superclass here
class CustomView: NSView, CALayerDelegate {}
      ^
你知道怎么解决这个问题吗


如果删除
CALayerDelegate
一致性,则不会调用委托方法。

不会调用委托方法,因为编译器看不到它们正在实现协议,因此无法从Objective-C中使用它们。但您仍然可以使用
@objc
属性手动使其可用。还应指定Objective-C选择器名称,该名称与Swift中的名称并不总是相同:

import AppKit
import SwiftUI

class CustomView: NSView {
    @objc(layoutSublayersOfLayer:)
    func layoutSublayers(of layer: CALayer) {}
}

@Michel的答案对我不起作用,因为我有一种不同的方法导致了这个问题

@objc(drawLayer:inContext:)
func draw(_ layer: CALayer, in ctx: CGContext)
{}
一般解决方案仍然是检查自定义
Swift
文件中实现的
Objective-C
方法,并使用:
@objc(methodName)
Swift
方法名称上方

以下是CALayerDelegate的方法列表(5):

Swift->

目标-C->