导入SwiftUI时如何使NSView与CALayerDelegate兼容?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了导入SwiftUI时如何使NSView与CALayerDelegate兼容?相关的知识,希望对你有一定的参考价值。

此编译:

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) {}
}

以上是关于导入SwiftUI时如何使NSView与CALayerDelegate兼容?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 swiftUI 按钮连接到 NSView 操作?

如何在 SwiftUI 中使用 Realm

如何使 NSView 透明,但保留属于它的对象? [复制]

将数据从简单的 NSView 传递到 SwiftUI View:即 event.keyCode 案例

如何在 macOS 上检测 SwiftUI 中的键盘事件?

如何在 macOS 上检测 SwiftUI 中的键盘事件?