Ответ 1
Прямо сейчас вы не можете сделать это с помощью дженериков, как вы обнаружили.
typealias Foo = Array
// Doesn't work: Reference to generic type 'Array' requires argument in <...>
Язык с быстрым программированием В главе iBook "Декларация псевдонима типа" фактически не указано ничего о том, какие типы не могут быть сглажены. Но это просто похоже на то, что частичные типы (например, генерики без указателей) не разрешены.
Если вы чувствуете, что это что-то, что должен сделать Swift, подайте Radar (bugreport) с Apple.
Во время исследования этого ответа я заметил, что проблема с частичным типом не только затрагивает typealias
, но также видна и в другом месте:
let foo = Array.self
// Doesn't work: Cannot convert the expression type 'Array<T>.Type' to type 'Array<T>.Type'
// … which is a very confusing error.
var bar: Array.Type
// Doesn't work: Reference to generic type 'Array' requires arguments in <...>
let bar: Array.Type = Array.self
// …/usr/bin/swift: Segmentation fault! :-)
Все это работает, если вы укажете типы заполнителей:
typealias Foo = Array<Int> // Works
let foo = Array<Int>.self // Works