Свифт: могу ли я узнать, является ли функция методом? Если так, могу ли я знать его цель? - PullRequest
0 голосов
/ 06 марта 2020

В Swift метод - это особый тип функции, привязанный к объекту.

Если мне дана произвольная функция, я хочу знать, является ли это методом. Если это так, я хочу знать объект, к которому он прикреплен.

Примерно так:

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

Существует ли что-то вроде isMethod() или getObject()?

1 Ответ

0 голосов
/ 06 марта 2020
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
...