首页 > 解决方案 > 斯威夫特:我能知道一个函数是否是一个方法吗?如果是这样,我能知道它的对象吗?

问题描述

在 Swift 中,方法是一种特殊类型的函数,它附加到一个对象上。

如果给我一个任意函数,我想知道它是否是一个方法。如果是,我想知道它附加到的对象。

像这样的东西:

func ownerOfFunction(_ f: () -> Void) -> Any? {
  return isMethod(f) ? getObject(f) : nil
}

有什么类似isMethod()getObject()存在的吗?

标签: swiftfunctional-programming

解决方案


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

推荐阅读