Я пытаюсь передать простое значение вперед в экземплярный экземпляр контроллера представления. Я не уверен в правильном способе сделать это.
Я копался в протоколах и делегатах, которые я уже использовал в нескольких местах в своем приложении, и по общему признанию все еще смущен, но затем натолкнулся на то, что кажется более простым решением, которое я не могу получить работать.
Это решение обновляет переменную в моем экземпляре контроллера представления в момент создания экземпляра.
Я использую Mapbox и при нажатии аннотации пытаюсь передать уникальное значение, хранящееся в моей базе данных, в подробный вид аннотации. Приведенный ниже пример упрощен до всего, что, по моему мнению, имеет значение для решения проблемы.
В моем первом контроллере вида, вид карты:
// function that fires on annotation tap
func mapView(_ mapView: MGLMapView, didSelect annotation: MGLAnnotation) {
let placeID = "123456" // simplified for the purpose of this question
func createPlaceDetailSheet() {
let placeDetailSheet = PlaceDetailViewController()
self.addChildViewController(placeDetailSheet)
self.view.addSubview(placeDetailSheet.view)
placeDetailSheet.didMove(toParentViewController: self)
let height = view.frame.height
let width = view.frame.width
placeDetailSheet.view.frame = CGRect(x: 0, y: self.view.frame.maxY, width: width, height: height)
placeDetailSheet.uniqueID = "123456" // trying to set value here
}
createPlaceDetailSheet()
}
Во втором контроллере представления у меня есть следующее:
class PlaceDetailViewController: UIViewController {
var uniqueID: String = ""
override func viewDidLoad() {
super.viewDidLoad()
print(uniqueID)
}
}
Я ожидаю, что уникальный идентификатор ("123456") будет напечатан из второго контроллера представления, но печатается только инициализатор пустой строки.
Я часами читал статьи о переполнении стека, пытаясь решить эту проблему, и теперь я в полном восторге. Большинство ответов основаны на использовании executeSegue, которое я не использую. Я также не уверен, является ли подход выше или использование протоколов и делегатов правильным вызовом.
Спасибо.