Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Array of Nested Type: Why Does the Compiler Complain?

Tags:

swift

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

like image 211
Verticon Avatar asked Feb 17 '26 06:02

Verticon


2 Answers

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.

like image 142
Eric Aya Avatar answered Feb 18 '26 20:02

Eric Aya


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>()
like image 41
Luca Angeletti Avatar answered Feb 18 '26 20:02

Luca Angeletti



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!