참고 : 이전 답변에서는 스토리 보드를 사용했습니다. 그러나 질문자가 스토리 보드를 사용하고 싶지 않았기 때문에 스토리 보드를 사용하지 않고 답변을 교체합니다. [이 대답은 https://stackoverflow.com/a/41095757/3549695에 의해 영감을 받았습니다.
먼저 Main.storyboard를 삭제하십시오. 그런 다음 프로젝트에서 -> 배포 정보는 -> 주요 인터페이스 AppDelegate.swift 함께 didFinishLaunching 수정에
다음 (대신 '홈페이지'의 LaunchScreen를 선택) 다음 사항을 DiscoverVC.swift은 다음과 같습니다
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
let discoverVC = DiscoverVC() as UIViewController
let navigationController = UINavigationController(rootViewController: discoverVC)
navigationController.navigationBar.isTranslucent = false
self.window?.rootViewController = navigationController
self.window?.makeKeyAndVisible()
return true
}
을 :
import UIKit
class DiscoverVC: UIViewController, SetLocationDelegate {
var name = ""
// to instantiate LocationVC once only for testing
var notVisted = true
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .yellow
loadLocationVCOnlyOnce()
}
func loadLocationVCOnlyOnce() {
// only visit one
guard notVisted else { return }
let locationVC = LocationVC()
locationVC.delegate = self
self.navigationController?.pushViewController(locationVC, animated: true)
}
func getLocation(loc: String) {
self.name = loc
print(name)
}
}
그리고 LocationVC은 다음과 같습니다
import UIKit
protocol SetLocationDelegate: class {
func getLocation(loc: String)
}
class LocationVC: UIViewController {
weak var delegate: SetLocationDelegate?
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .cyan
self.delegate?.getLocation(loc: "Sam")
}
}
시작할 때 자동으로 DiscoverVC (노란색 배경)에서 LocationVC (시안 색 배경)로 이동합니다.
상단의 '뒤로'버튼을 클릭하면 '샘'이 본체에 인쇄 된 것을 볼 수 있습니다. 그리고 귀하의 견해가 DiscoverVC (노란색 배경)로 돌아 왔습니다.
In LocationVC 컨트롤러의 viewDidLoad() 메소드가 호출되는지 확인하십시오. –
위임자의 '강력한'참조를 사용하면 현재 '약한 var 대리인 : SetLocationDelegate?'가 위임자를 약한 참조로 변경하여 'var delegate : SetLocationDelegate?'로 변경하고 작동하게됩니다. –
@ NishantBhindi는 메모리 누수를 일으키는 유지주기를 생성합니다. 이러지 마. – shallowThought