这个问题已经有了答案:
Array of Nested Type: Why Does the Compiler Complain?
3个答案
考虑嵌套在另一个结构中的结构:

struct Struct1 {
    struct Struct2 {
        var name: String?
    }
}

我想创建一个包含Struct2值的数组。起初我试过:
var struct2Array = [Struct1.Struct2]()

但这会给编译器带来错误:
error: invalid use of '()' to call a value of non-function type '[Struct1.Struct2.Type]'
var struct2Array = [Struct1.Struct2]()

我可以通过声明变量的类型并使用空数组或更详细的语法来创建数组:
var struct2Array: [Struct1.Struct2] = []
var struct2ArrayVerbose = Array<Struct1.Struct2>()

但是为什么不能为嵌套结构使用速记初始值设定项呢?

最佳答案

这只是语言上的一个漏洞。毕竟,[Type]语法只是句法上的糖分;正如您正确地说的,如果您将真正的语法与Array<Type>一起使用,或者使用[Type]但不作为构造函数,则没有问题。您还可以使用类型别名:

struct Struct1 {
    struct Struct2 {
        var name: String?
    }
}

typealias Struct2 = Struct1.Struct2

var struct2Array = [Struct2]()

08-16 01:17