Я только что обновил свой код от Swift 1.2 до Swift 2.1. Проект полностью функционировал с предыдущей версией Swift, но теперь я вижу «Неоднозначное использование ошибок« init ». Кажется, что каждое возникновение этой ошибки вызвано использованием необязательных аргументов в конструкторе. Я даже удалось воспроизвести этот вопрос в Xcode Playground со следующим упрощенным кодом по той же схеме:Неоднозначное использование «init» с необязательными аргументами в Swift 2
class Item : UIView {
override init(frame: CGRect = CGRectZero) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
let i = Item() # Ambiguous use of 'init(frame:)'
Однако, я до сих пор не понимаю, почему Swift 2.1 теперь имеет проблемы с этим рисунком, или что альтернатива должна быть. Я попытался найти это, но все, на что я наткнулся, было ошибкой «неоднозначного использования» для других (неконструкторных) методов из-за переименования метода или изменения подписи, ни один из которых здесь не имеет места.
Этот сниппет не работает в Swift 1.2 либо (я только что протестировал). Возможно, ваш реальный код сделал, но эта часть этого не делает. – Moritz
странно, глядя на diff, пытаясь понять, что еще может измениться, но не увидев ничего другого, связанного с этим, и у меня не было проблем с созданием этого кода раньше (сравнение с pre-swift2 commit). –
Итак, после более тщательного изучения (не удалось проверить старую версию Swift до тех пор, пока я не установил более старую виртуальную машину), ошибка Swift 1.2 дает другое. В этом конкретном случае Swift 1.2 пытается вызвать конструктор с помощью кодера. Я не уверен, почему это не происходит в самом моем приложении, так как там есть конструктор aDecoder, и все аргументы init являются необязательными, поэтому он не имеет больше информации. –