Я с ума сошел или не должен скомпилировать этот быстрый код?Включить класс Swift в протокол с тиалианами
protocol Protocol {
typealias Thing
}
class Class<X>: Protocol {
typealias Thing = X
}
func test<X:Protocol where X.Thing == Int>() -> X {
return Class<Int>() // error: cannot convert return expression of type 'Class<Int>' to return type 'X'
}
Я не могу показаться, чтобы привести объект к своему протоколу, хотя общий тип и aliastype матч.
EDIT:
я придумал с кодом выше, извлекая логику из моего существующего кода в целях упрощения задачи. Я сделал некоторые ошибки при этом. Вот обновленный (и, надеюсь, меньше путаницы) Пример кода:
protocol Protocol {
typealias Thing
}
class Class<X>: Protocol {
typealias Thing = X
}
func test<Y: Protocol where Y.Thing == Int>() -> Y {
return Class<Y.Thing>()
}
Я ожидал, что компилятор, чтобы тест() для компиляции с типом результата является Protocol<Int>
.
Определение вашей функции 'test' говорит, что ей нужно вернуть' X'. – Michael