已排序选择器部件:
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", ]) }