Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 无法将新参数传递给`NSView`的`init``_Swift_Xcode_Swiftui - Fatal编程技术网

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