cs193p, 2015, Урок 02, перегрузка функций

Недавно я наткнулся на новейший курс Стэнфордского программирования для iOS, который вел Пол Хагерти. Ура!

Я прошел Урок 01 без проблем. Сейчас я работаю над Уроком 02.

Возникла проблема на 42-й минуте, когда Пол показывает, как перегрузить функцию performOperation. Идея состоит в том, чтобы иметь два определения: одно для функции с двумя аргументами (+, -, *, /), а другое для функции с одним аргументом, например. sqrt.

Похоже, что с тех пор, как урок был опубликован, Swift был обновлен/изменен, и это больше не работает, как показано в уроке.

Кто-нибудь знает, как заставить его работать? Я искал вокруг и не могу найти ничего полезного.

func performOperation (operation: (Double, Double) -> Double) { if operandStack.count >= 2 { displayValue = operation (operandStack.removeLast(), operandStack.removeLast()) enter () } }

func performOperation (operation: Double -> Double) { if operandStack.count >= 1 { displayValue = operation (operandStack.removeLast()) enter () } }

Заранее спасибо!


person Zonker.in.Geneva    schedule 28.04.2015    source источник
comment
Вам следует поработать над своим Google Fu :) В этом месяце об этом спрашивали не менее 5 раз (тот же курс в Стэнфорде, тот же код, то же сообщение об ошибке)   -  person Martin R    schedule 28.04.2015
comment
Я искал много разных комбинаций тегов и точное сообщение об ошибке. Предоставленная вами ссылка имеет только один тег (swift) и не упоминает другие теги. Так что да, не нашел. Итак, у меня есть обходной путь, спасибо. Но я не чувствую, что проблема решена. Преобладает мнение, что Objective-C не поддерживает перегрузку и поэтому не работает, но тогда почему он работал в более ранней версии Swift? Это осталось без ответа. Даже если компилятор его просто не обнаружит, он все равно вылетит, верно? Но не разбился. В демо работало отлично.   -  person Zonker.in.Geneva    schedule 28.04.2015
comment
Вы спросили Кто-нибудь знает, как заставить его работать, и на этот вопрос дан ответ в этом потоке (используйте другие имена методов, или не наследуйте от NSObject, или сделайте метод закрытым ). – Похоже, что с тех пор, как урок был опубликован, Swift был обновлен/изменен, на что также есть ответы в этой ветке со ссылками на примечания к выпуску.   -  person Martin R    schedule 28.04.2015
comment
(продолжение) Если функция не поддерживается, она не обязательно дает сбой во время выполнения. Это может быть неопределенное поведение, которое может работать случайно, давать сбой или давать неверные результаты. – Но, конечно, правомерно спросить почему это работало в более ранней версии Swift?, но это не то, что вы спрашивали здесь, поэтому вы можете опубликовать это как отдельный вопрос.   -  person Martin R    schedule 28.04.2015