Метод класса/типа


#1

Всем доброго вечера!
При инициализации экземпляра класса необходимо указывать метод в качестве параметра. Этот метод может быть трейлинг клоужером, а может быть методом этого же класса, причем кол-во и тип параметров у этого метода может быть любым. Как прописать, чтобы xcode не ругался на ошибку

Instance member ‘addNumber’ cannot be used on type ‘Person’; did you mean to use a value of this type instead?

? Ну например, есть класс Person, ему надо присвоить toDo. Сами методы реализуются через extension, а вызываются через метод класса perform().

class Person {

    var name: String
    var toDo: (Any...) -> ()
//    var toDo: (Person) -> (Any...) -> ()

    
    init(name: String, toDo: @escaping (Any...) -> ()) {
        self.name = name
        self.toDo = toDo
    }
    
    func perform() {
        toDo()
    }
}

extension Person {
    
    func addNumber(_ number: Int) {
        print("addNumber: \(number)")
    }
    
    func addEmail(_ email: String) {
        print("addEmail: \(email)")
    }
    
    func addAddress(_ city: String, _ street: String) {
        print("addAddress: \(city), \(street)")
    }
    
}

let person = Person(name: "Vasya", toDo: Person.addNumber(123))
person.perform()

#2
class Person {
    let name: String
    let toDo: () -> Void
    init(name: String, toDo: @escaping () -> Void) {
        self.name = name
        self.toDo = toDo
    }
    func perform() {
        toDo()
    }
}

extension Person {
    static func addNumber(_ number: Int) {
        print("addNumber: \(number)")
    }
    static func addEmail(_ email: String) {
        print("addEmail: \(email)")
    }
    static func addAddress(_ city: String, _ street: String) {
        print("addAddress: \(city), \(street)")
    }
}

var person = Person(name: "Vasya", toDo: { Person.addNumber(123) })
person.perform()

person = Person(name: "Vasya", toDo: { Person.addEmail("123") })
person.perform()

person = Person(name: "Vasya", toDo: { Person.addAddress("123", "123") })
person.perform()


#3

Теперь разобрался, спасибо!