Swift动态调用方法

//动态调用方法
//    let selector = NSSelectorFromString("searchBarShouldBeginEditing:")
//    if let delegate = searchBarDelegate {
//        if let method = extractMethodFrom(owner: searchBarDelegate!, selector: selector) {
//            method(searchBar)
//        }
//    }
    func extractMethodFrom(owner: AnyObject, selector: Selector) -> ((Any?) -> Any)? {
        let method: Method?
        if owner is AnyClass {
            method = class_getClassMethod(owner as? AnyClass, selector)
        } else {
            print(type(of: owner))
            method = class_getInstanceMethod(type(of: owner), selector)
        }
        
        if let one = method {
            let implementation = method_getImplementation(one)
            
            typealias Function = @convention(c) (AnyObject, Selector, Any?) -> Void
            
            let function = unsafeBitCast(implementation, to: Function.self)
            
            return { userinfo in function(owner, selector, userinfo) }
            
        } else {
            return nil
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容