Это рабочий код от Swift Playgrounds - Generics:
func makeArray<T>(item: T, numberOfTimes: Int) -> [T] {
var result = [T]()
// some code here
return result
}
Обратите внимание на строку
var result = [T]()
Здесь работает корректно. Однако в следующем примере с аналогичной идеей
func anyCommonElements<T: Sequence, U: Sequence>(_ lhs: T, _ rhs: U)
-> [T.Iterator.Element]
where T.Iterator.Element: Equatable, T.Iterator.Element == U.Iterator.Element {
var result = [T.Iterator.Element]()
// some code here
return result
}
вылетает с ошибкой:
Playground execution failed: error: Generics.xcplaygroundpage:28:42: error: cannot call value of non-function type '[T.Iterator.Element.Type]'
var result = [T.Iterator.Element]()
~~~~~~~~~~~~~~~~~~~~^~
Исправление для этого заключается в создании массива одним из следующих способов:
var result: [T.Iterator.Element] = []
или это:
var result = Array<T.Iterator.Element>()
Однако я не понимаю, в чем разница между этими примерами. Я предполагаю, что это может быть ошибка Swift, аналогичная этой. Есть идеи, почему он ведет себя таким странным образом?
[Type]()
должна быть синтаксическим сахаром дляArray<Type>()
В данном случае это не работает, так что это ошибка. Если не считать исправления ошибки, ваш вопрос уже содержит два совершенно хороших исправления. - person JeremyP   schedule 20.04.2017