Альтернатива аргументу по умолчанию в протоколе Swift - PullRequest
0 голосов
/ 11 мая 2019

Я понимаю, что аргумент по умолчанию не разрешен в протоколе, а это означает, что следующее недопустимо:

protocol testProtocol {
    func testFunc (_ a: String, _ b: String? = nil)
}

Так что я понимаю, что b все еще может быть необязательным с помощью следующего объявления

protocol testProtocol {
    func testFunc (_ a: String, _ b: String?)
}

и мой класс может соответствовать этому протоколу:

class TestIt: testProtocol {
    func testFunc(_ a: String, _ b: String?) {
        print ("Do stuff with a and b")
    }
}

Однако я хотел бы вызвать эту функцию со следующим объявлением:

let test = TestIt()

    test.testFunc("a")

Неизбежно, что это не компилируетсяи решение кажется

let test = TestIt()
test.testFunc("a", nil)

Однако передача nil в функцию не кажется очень быстрым способом выполнения действий.

Обратите внимание, что это минимальный пример, это не производствоготов и просто определить решение общей проблемы передачи nil в протоколе.

Могу ли я вызвать testFunc без использования nil?

1 Ответ

4 голосов
/ 11 мая 2019

Вы можете сделать так:

protocol TestProtocol {
    func testFunc (_ a: String, _ b: String?)
}

extension TestProtocol {
    func testFunc (_ a: String) {
        self.testFunc(a, nil)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...