嵌套类型数组:为什么编译器会抱怨?

时间:2016-04-21 14:56:16

标签: swift

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

Playground执行失败:MyPlayground.playground:109:22:错误:无效使用'()'调用非函数类型'[ClassA.ClassB.Type]'的值 让doNotCompile = ClassA.ClassB                      ^ ~~

3 个答案:

答案 0 :(得分:3)

正如您所说,它适用于这种语法:

let arrayOfClassB: [ClassA.ClassB] = []

但如果我们声明[]()

,则typealias语法有效
typealias InnerClass = ClassA.ClassB
let arrayOfAliasesOfClassB = [InnerClass]()

所以我说它是一个错误,let arrayOfClassB = [ClassA.ClassB]()也可以在不需要类型的情况下工作。

更新:Apple已经an opened bug了解此事。

答案 1 :(得分:1)

我不知道速记语法不起作用的原因。但是编译器似乎喜欢扩展语法

let list = Array<ClassA.ClassB>()

答案 2 :(得分:-1)

compiles是ClassA.ClassB

类型的数组

在doesNotCompile中,您尝试将数组用作函数。不是吗?

let doesNotCompile = ClassA.ClassB()