Ошибка при использовании значения по умолчанию в параметре метода протокола - PullRequest
0 голосов
/ 30 мая 2018

У меня есть метод в протоколе и я использую этот метод много раз.Теперь мне нужно добавить еще один параметр в этом методе.Мне просто нужно передать этот параметр в одном случае.Поэтому я добавил значение по умолчанию в этом параметре.Но протокол не принимает значение по умолчанию.Итак, что я сделал:

protocol TestP {
    func update(srId: String, srType: String? )
}

class Test: TestP {
    func update(srId: String, srType: String? = "") {
        print("abc")
    }
}

let test: TestP = Test()
test.update(srId: "abc")

Но здесь я получаю ошибку error: missing argument for parameter 'srType' in call, потому что во время компиляции он проверяет метод в протоколе и не находит значение по умолчанию для srType.Поэтому я пытаюсь добавить тот же метод в расширение Protocol, как указано:

extension TestP {
    func update(srId: String, srType: String? = "") {
        print("abc")
    }
}

Здесь должен быть вызван метод класса Test, поскольку объект имеет класс Test.Но каждый раз вызывается метод протокола.Я не знаю, что не так с моим кодом?Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Я бы предложил вам использовать следующую сигнатуру метода:

extension TestP {
    func update(srId: String) {
        update(srId: srId, srType: "")
    }
}

Потому что, если вы хотите передать srType в вызове, у вас уже есть метод func update(srId: String, srType: String?) в протоколе.

Нет необходимости использовать параметр со значением по умолчанию.

Вызов со значением по умолчанию:

let test: TestP = Test()
test.update(srId: "abc")

Вызов с параметром srType:

let test: TestP = Test()
test.update(srId: "abc", srType: "type")
0 голосов
/ 30 мая 2018

Обновить расширение протокола с помощью кода ниже

Расширение предоставляет значения по умолчанию, вызывая функцию исходного протокола с этими значениями по умолчанию

extension TestP {
    func update(srId: String, srType: String? = "") {
        update(srId: srId, srType: srType)
    }
}
...