Reputation: 2513
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 ^ ~~
Upvotes: 3
Views: 248
Reputation: 70098
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.
Upvotes: 3
Reputation: 59496
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>()
Upvotes: 1
Reputation: 404
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()
Upvotes: -1