已排序选择器部件:
import SwiftUI
import UIKit
struct DocumentPickerViewController: UIViewControllerRepresentable {
@Binding var isPresented: Bool
@Binding var documentData: Data?
func makeUIViewController(context: Context) -> UIDocumentPickerViewController {
let documentPicker = UIDocumentPickerViewController(forOpeningContentTypes: [UTType.xml], asCopy: false)
documentPicker.delegate = context.coordinator
return documentPicker
}
func updateUIViewController(_ uiViewController: UIDocumentPickerViewController, context: Context) {
}
func makeCoordinator() -> Coordinator {
return Coordinator(isPresented: $isPresented, documentData: $documentData)
}
class Coordinator: NSObject, UIDocumentPickerDelegate {
@Binding var isPresented: Bool
@Binding var documentData: Data?
init(isPresented: Binding<Bool>, documentData: Binding<Data?>) {
_isPresented = isPresented
_documentData = documentData
}
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
guard let url = urls.first,
let data = try? Data(contentsOf: url) else {
return
}
documentData = data
isPresented = false
}
func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
isPresented = false
}
}
}
在ContentView.swift中:
Button(action: {
self.showDocumentPicker.toggle()
}) {
Text("Load Type Tree")
}.sheet(isPresented: $showDocumentPicker) {
DocumentPickerViewController(isPresented: self.$showDocumentPicker, documentData: self.$documentData)
}
.onReceive(Just(documentData)) { documentData in. // <-- not get called
sendLog(dictionary: [
"text": "document data received",
])
}