- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题不是关于如何调配,而是这个特定代码片段中发生了什么:
private let swizzling: (UIViewController.Type) -> () = { viewController in
let originalSelector = #selector(viewController.viewWillAppear(_:))
let swizzledSelector = #selector(viewController.proj_viewWillAppear(animated:))
let originalMethod = class_getInstanceMethod(viewController, originalSelector)
let swizzledMethod = class_getInstanceMethod(viewController, swizzledSelector)
method_exchangeImplementations(originalMethod, swizzledMethod) }
extension UIViewController {
open override class func initialize() {
// make sure this isn't a subclass
guard self === UIViewController.self else { return }
swizzling(self)
}
// MARK: - Method Swizzling
func proj_viewWillAppear(animated: Bool) {
self.proj_viewWillAppear(animated: animated)
let viewControllerName = NSStringFromClass(type(of: self))
print("viewWillAppear: \(viewControllerName)")
}
}
这个代码狙击手来自这里:Swizzling CocoaTouch class
我的问题是围绕以下代码行:
// make sure this isn't a subclass
guard self === UIViewController.self else { return }
为什么我们需要检查它是否是 UIViewController 的子类?我的场景是我想将带有 View 名称的分析数据发送到 Omniture(在 viewWillAppear 上)。如果我进行检查,调配永远不会起作用,但是当我注释掉这一行时,我得到了我想要的结果,并且每个 View Controller 都发送了数据。
最佳答案
您看过的示例似乎来自在类 initialize
方法中完成此操作的日子,您必须在其中进行检查,否则最终可能会多次运行相同的代码次(第一次使用子类时),这会导致您调配一个已经调配过的方法。
但是 initialize
方法在 Swift 中不再被允许,因此该行不适用。
关于ios - Swift 4 + 调配 viewWillAppear(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47538224/
我调配 NSMutableArray addObject 失败了。代码如下: Method ori_Mehtod = class_getInstanceMethod([self class], @se
我的问题不是关于如何调配,而是这个特定代码片段中发生了什么: private let swizzling: (UIViewController.Type) -> () = { viewControll
我正在 MKMapView 和 UIScrollView 上调配 initWithFrame: 和 dealloc,以添加和删除通知监听器以监视与外部设备的连接,以便我可以为这些 View 连接其他手
我正在使用 AmazonElasticMapReduceAsyncClientBuilder 为实例组设置自动扩展策略。 当我执行 aws emr describe-cluster --cluster
我是一名优秀的程序员,十分优秀!