我真的不明白这个错误是从哪里来的。它停留在"返回Hstack"线上。有人能帮我克服这个错误吗?
我应该创建View的子类并将其插入当前Image视图所在的位置吗?
struct ContentView: View {
@State private var sensitivity: Double = 50
@State private var imageUrl: URL = URL(string: "http://localhost")!
@State private var imageDropped = false
var body: some View {
let dropDelegate = MyDropDelegate(imageUrl: $imageUrl, imageDropped: $imageDropped)
return HStack {
VStack {
Text(/*@START_MENU_TOKEN@*/"Input Video"/*@END_MENU_TOKEN@*/)
.padding(.top)
Image(NSImage())
.padding(.leading)
.frame(width: 400.0, height: 200.0)
Text(/*@START_MENU_TOKEN@*/"Mask Image"/*@END_MENU_TOKEN@*/)
Image(self.imageDropped ? NSImage(byReferencing: imageUrl) : NSImage())
.padding(.bottom)
.frame(width: 100.0, height: 100.0)
.onDrop(of: ["public.file-url"], delegate:dropDelegate)
}
VStack {
Spacer()
Text("Sensitivity")
Slider(value: $sensitivity, in: 0...100, step:10)
.frame(width: 150.0)
Spacer()
Button(action: {print (self.sensitivity)} ) {
Text(/*@START_MENU_TOKEN@*/"Run"/*@END_MENU_TOKEN@*/)
}
Spacer()
.frame(height: 20.0)
}
}
}
}
正如SwiftUI中经常发生的那样,错误被错误检测到。您使用了不正确的Image
构造函数(应该是Image(nsImage: )
这是固定部件。使用Xcode 12b3进行测试。
return HStack {
VStack {
Text(/*@START_MENU_TOKEN@*/"Input Video"/*@END_MENU_TOKEN@*/)
.padding(.top)
Image(nsImage: NSImage()) // << here !!
.padding(.leading)
.frame(width: 400.0, height: 200.0)
Text(/*@START_MENU_TOKEN@*/"Mask Image"/*@END_MENU_TOKEN@*/)
Image(nsImage: self.imageDropped ? // << here !!
NSImage(byReferencing: imageUrl) : NSImage())
.padding(.bottom)
.frame(width: 100.0, height: 100.0)
.onDrop(of: ["public.file-url"], delegate:dropDelegate)
}
注意:我认为MyDropDelegate
定义正确
以下是我复制用于编译的内容:
class MyDropDelegate: DropDelegate {
func performDrop(info: DropInfo) -> Bool {
return true
}
init(imageUrl: Binding<URL>, imageDropped: Binding<Bool>) {
}
}