обектът, предаден в метода на делегат, става неинициализиран в класа, където е внедрен протоколът. но същият обект има валиден адрес в класа, откъдето е извикан делегатът. Това се случва само в maccatalyst, същият код работи перфектно в iOS и iPadOS
Протоколна декларация
protocol ASPatientSearchDelegate: class {
func moveToPaitentProfileScreen(patient: ASCardEntity)
}
Деклариране на променлива на делегат
weak var delegate: ASPatientSearchDelegate? = nil
Обаждане на делегат
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let patient = self.searchResults[indexPath.row]
self.delegate?.moveToPaitentProfileScreen(patient: patient)
}
Реализация на метода
extension ASAppointmentViewController: ASPatientSearchDelegate {
func moveToPaitentProfileScreen(patient: ASCardEntity) {
guard let json = patient.details as? JSON else { return }
}
}
Делегат, назначен в ASAppointmentViewController
@IBAction func searchButtonAction(_ sender: UIButton) {
let searchViewController = ASPatientSearchViewController(nibName: ASPatientSearchViewController.className, bundle: nil)
searchViewController.popoverPresentationController?.delegate = self
searchViewController.modelController.delegate = self
}
Използван клас
class ASCardEntity: NSObject {
var details: Any?
}