Ошибка Swift: невозможно вызвать значение нефункционального типа '[T.Iterator.Element.Type]'

Это рабочий код от 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, аналогичная этой. Есть идеи, почему он ведет себя таким странным образом?


person Ivan Yurchenko    schedule 20.04.2017    source источник
comment
Также наблюдается здесь: stackoverflow.com/questions/36773355/. – А что ты, собственно, спрашиваешь? Вы уже узнали, что это ошибка.   -  person Martin R    schedule 20.04.2017
comment
Это точно так же, как ошибка, на которую вы ссылаетесь — см. также stackoverflow.com/q/39041712/2976878   -  person Hamish    schedule 20.04.2017
comment
Большая часть, о которой я говорю, касается использования синтаксиса инициализатора массива с вложенными типами, поэтому, хотя это похоже, это может быть еще одна проблема. Я пытаюсь понять, действительно ли это ошибка или просто языковая особенность, с которой я не знаком.   -  person Ivan Yurchenko    schedule 20.04.2017
comment
И помимо моего любопытства, я думаю, будет полезно иметь такой вопрос с решением для тех, кто может столкнуться с этой проблемой.   -  person Ivan Yurchenko    schedule 20.04.2017
comment
Мне определенно кажется, что ошибка [Type]() должна быть синтаксическим сахаром для Array<Type>() В данном случае это не работает, так что это ошибка. Если не считать исправления ошибки, ваш вопрос уже содержит два совершенно хороших исправления.   -  person JeremyP    schedule 20.04.2017