swift - 斯威夫特:我能知道一个函数是否是一个方法吗?如果是这样,我能知道它的对象吗?
问题描述
在 Swift 中,方法是一种特殊类型的函数,它附加到一个对象上。
如果给我一个任意函数,我想知道它是否是一个方法。如果是,我想知道它附加到的对象。
像这样的东西:
func ownerOfFunction(_ f: () -> Void) -> Any? {
return isMethod(f) ? getObject(f) : nil
}
有什么类似isMethod()
或getObject()
存在的吗?
解决方案
func ownerOfFunc<T> (_ parameter: AnyObject,_ type: T.Type) -> Bool {
return parameter is T
}
protocol P1 {}
protocol P2: P1 {}
class C1: NSObject, P2 {
@objc func fuc1() {}
func fuc2() {}
}
let o = C1()
o.responds(to: Selector("fuc1")) // true (Works only Objc selectors)
o.responds(to: Selector("fuc2")) // false
ownerOfFunc(o, P1.self) // true
ownerOfFunc(o, P2.self) // true
ownerOfFunc(o, Int.self) // false
推荐阅读
- javascript - Lodash - 不同身份的DifferenceBy
- latex - 编号乳胶表示 - 计数问题
- c# - 带有 Objective-C 网络扩展的 MacOS C# Xamarin 应用程序
- docker - 如何解决新部署应用程序DOKKU后丢失上传文件的问题
- c# - 将 Restsharp 调用转换为异步调用
- c# - Xamarin Forms在按钮按下时将视图添加到页面?
- c++ - 如何将 const char* [] 转换为单个内存块,例如 char* ptr
- windows-10 - 如果我无法在 Python shell 和 Windows 10 中的 IDLE 中键入双下划线怎么办?
- ruby - 我可以使用这种表示法在对象上调用自定义方法吗?
- optaplanner - Optaplanner:动态终止配置