【问题标题】:Can I know if a function is a method? If so, can I know its object?斯威夫特:我能知道一个函数是否是一个方法吗?如果是这样,我能知道它的对象吗?
【发布时间】:2020-06-18 15:38:34
【问题描述】:

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

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

类似这样的:

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

是否存在 isMethod()getObject() 之类的东西?

【问题讨论】:

  • 您能解释一下您这样做的目标是什么吗?这是一个有趣的问题。之所以使用泛型函数,是因为具体的类型并不重要。因此,试图查找有关特定类型的信息似乎是一种代码异味,因为它首先打破了使用非特定函数的理由。不过……这是一个有趣的问题。 ??????
  • 谢谢!如果我能做到这一点,我认为我可以使用更简洁、更好 autoclosured fn(self.method) 而不是fn(self, selector: #selector(method)。对于NotificationCenter 的扩展。此外,这很有趣。 ;)
  • 这里提出的问题与您的要求很接近,除了确定它是否是一种方法:stackoverflow.com/questions/28954361/…。有些答案可能会有所帮助。
  • @Wattholm 这个问题是问什么调用函数(解析调用堆栈可能是答案)。我问的是什么对象,如果有的话,拥有一个函数(从而使它成为一个方法)。

标签: swift functional-programming


【解决方案1】:
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

【讨论】:

  • 可能很有趣,但绝对不是我要问的。
猜你喜欢
  • 1970-01-01
  • 2010-09-20
  • 2021-08-25
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多