Swift 无法将新参数传递给`NSView`的`init``
在下面的代码中,我试图将一个附加参数传递给Swift 无法将新参数传递给`NSView`的`init``,swift,xcode,swiftui,Swift,Xcode,Swiftui,在下面的代码中,我试图将一个附加参数传递给VidePlayerView。现在,我正在创建一个VideoPlayerView的实例,并且没有向它传递任何参数。但是,这最终会调用带有NSRect参数的init方法(我真的不知道这是从哪里来的) 我想向VideoPlayerView传递一个附加参数,但我不知道该怎么做,因为我似乎无法访问frame参数 import SwiftUI import AVKit // Note: I couldn't find a way to pass this thr
VidePlayerView
。现在,我正在创建一个VideoPlayerView
的实例,并且没有向它传递任何参数。但是,这最终会调用带有NSRect
参数的init
方法(我真的不知道这是从哪里来的)
我想向VideoPlayerView
传递一个附加参数,但我不知道该怎么做,因为我似乎无法访问frame
参数
import SwiftUI
import AVKit
// Note: I couldn't find a way to pass this through the `init` method
var playerLayer = AVCaptureVideoPreviewLayer()
final class VideoPlayerView: NSView {
// MARK: - Initializers
override public init(frame frameRect: NSRect) {
super.init(frame: frameRect)
commonInit()
}
required public init?(coder decoder: NSCoder) {
super.init(coder: decoder)
commonInit()
}
private func commonInit() {
// Do something with playerLayer
}
}
public struct VideoPlayerViewView: NSViewRepresentable {
init(layer: AVCaptureVideoPreviewLayer?) {
if let layer = layer {
playerLayer = layer
} else {
print("No Layer Set")
}
}
public func makeNSView(context: NSViewRepresentableContext<VideoPlayerViewView>) -> NSView {
return VideoPlayerView()
}
}
以下是可能的方法。使用Xcode 11.4进行测试
final class VideoPlayerView: NSView {
private var playerLayer: AVCaptureVideoPreviewLayer?
// MARK: - Initializers
override public init(frame frameRect: NSRect) {
super.init(frame: frameRect)
commonInit()
}
public convenience init(frame frameRect: NSRect = .zero, layer: AVCaptureVideoPreviewLayer?) {
self.init(frame: frameRect)
self.playerLayer = layer
}
required public init?(coder decoder: NSCoder) {
super.init(coder: decoder)
commonInit()
}
private func commonInit() {
// Do something with playerLayer
}
}
public struct VideoPlayerViewView: NSViewRepresentable {
init(layer: AVCaptureVideoPreviewLayer?) {
if let layer = layer {
playerLayer = layer
} else {
print("No Layer Set")
}
}
public func makeNSView(context: NSViewRepresentableContext<VideoPlayerViewView>) -> NSView {
return VideoPlayerView(layer: playerLayer)
}
public func updateNSView(_ nsView: NSView, context: Context) {
}
}
final class VideoPlayerView:NSView{
私人var播放器:AVCaptureVideoPreviewLayer?
//马克:初始化者
重写公共初始化(frame-frameRect:NSRect){
super.init(frame:frameRect)
commonInit()
}
公共便利初始化(frame-frameRect:NSRect=.zero,层:AVCaptureVideoPreviewLayer?){
self.init(frame:frameRect)
self.playerLayer=层
}
必需的公共初始化?(编码器-解码器:NSCoder){
super.init(编码器:解码器)
commonInit()
}
私有函数commonInit(){
//对playerLayer做些什么
}
}
公共结构VideoPlayerViewView:NSViewRepresentable{
初始化(层:AVCaptureVideoPreviewLayer?){
如果let layer=layer{
playerLayer=层
}否则{
打印(“未设置图层”)
}
}
public func makeNSView(上下文:NSViewRepresentableContext)->NSView{
返回VideoPlayerView(图层:playerLayer)
}
public func updateNSView(unsview:nsView,context:context){
}
}
您不能使用相关层的边界吗?
final class VideoPlayerView: NSView {
private var playerLayer: AVCaptureVideoPreviewLayer?
// MARK: - Initializers
override public init(frame frameRect: NSRect) {
super.init(frame: frameRect)
commonInit()
}
public convenience init(frame frameRect: NSRect = .zero, layer: AVCaptureVideoPreviewLayer?) {
self.init(frame: frameRect)
self.playerLayer = layer
}
required public init?(coder decoder: NSCoder) {
super.init(coder: decoder)
commonInit()
}
private func commonInit() {
// Do something with playerLayer
}
}
public struct VideoPlayerViewView: NSViewRepresentable {
init(layer: AVCaptureVideoPreviewLayer?) {
if let layer = layer {
playerLayer = layer
} else {
print("No Layer Set")
}
}
public func makeNSView(context: NSViewRepresentableContext<VideoPlayerViewView>) -> NSView {
return VideoPlayerView(layer: playerLayer)
}
public func updateNSView(_ nsView: NSView, context: Context) {
}
}