3
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 ^ ~~

Verticon
  • 2,419
  • 16
  • 34

3 Answers3

3

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.

Eric Aya
  • 69,473
  • 35
  • 181
  • 253
1

I don't know the reason why the shorthand syntax does not work. However the compiler seems to like the extended syntax

let list = Array<ClassA.ClassB>()
Luca Angeletti
  • 58,465
  • 13
  • 121
  • 148
-1

compiles is an array of type ClassA.ClassB

In doesNotCompile you are trying to use an array as a function. Didn't you mean:

let doesNotCompile = ClassA.ClassB()
  • 3
    No, OP is trying to create an empty array of the specific type, he is not trying to create an instance of either ClassA or ClassB – luk2302 Apr 21 '16 at 15:07