Robert Vaessen Robert Vaessen - 7 months ago 11
Swift Question

Array of Nested Type: Why Does the Compiler Complain?

class ClassA {
class ClassB {
}
}
let compiles: [ClassA.ClassB]
let doesNotCompile = [ClassA.ClassB]()


Playground execution failed: MyPlayground.playground:109:22: error: invalid use of '()' to call a value of non-function type '[ClassA.ClassB.Type]'
let doesNotCompile = ClassA.ClassB
^ ~~

Answer

As you noted, it works with this syntax:

let arrayOfClassB: [ClassA.ClassB] = []

but the []() syntax works if we declare a typealias:

typealias InnerClass = ClassA.ClassB
let arrayOfAliasesOfClassB = [InnerClass]()

So I'd say it's a bug, let arrayOfClassB = [ClassA.ClassB]() should also work without needing a typealias.

Update: there's already an opened bug about this at Apple.

Comments