Я недавно читал Protocols, Generic Type Constraints and Arrays in Swift. Мой вопрос касается следующих двух примеров из блога:Поведение протоколов с самим собой
Код:
protocol MyProtocol1 {
var myValue: Self { get }
}
let array: [MyProtocol1] = [] // Error.
Выдает ошибку:
Protocol 'MyProtocol1' can only be used as a generic constraint because it has Self or associated type requirements.
что ожидается и там было несколько С.О. вопросы, касающиеся этой темы. Однако, изменив myValue
на функцию, больше не возникает никакой ошибки, но в обоих случаях возвращается Self
.
protocol MyProtocol2 {
func myValue() -> Self
}
let array: [MyProtocol2] = [] // This is okay.
Кто-нибудь знает причину этого, казалось бы, странного поведения?
Я рекомендую обсудить это на devforums. Я подозреваю, что это угловой случай и не может быть преднамеренным. У разработчиков Swift гораздо больше шансов дать окончательный ответ. –
Вы в итоге нашли ответ на это поведение? – bartzy