I have some questions when use dynamicReplacement.
1.Why we need dynamicReplacement?
class ViewController: UIViewController {
}
extension UIViewController {
@_dynamicReplacement(for: viewDidLoad())
func _viewDidLoad() {
print("view didLoad")
viewDidLoad()
}
}
Nothing happens.
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension ViewController {
@_dynamicReplacement(for: viewDidLoad())
func _viewDidLoad() {
print("view didLoad")
viewDidLoad()
}
}
This will print "view didLoad".
So why not just
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print("view didLoad")
}
}
-
class ViewController: UIViewController {
}
extension ViewController {
@_dynamicReplacement(for: viewDidLoad())
func _viewDidLoad() {
print("view didLoad")
viewDidLoad()
}
}
It will print "view didLoad" endless, why?
malhal
(Malcolm Hall)
2
Seems you can't use @_dynamicReplacement with UIViewController because it's methods would need to be @dynamic which they aren't.
tera
3
You rarely rarely need it. Normally you just subclass and override relevant methods.
See some details about _dynamicReplacement here.