一尘不染

为什么在创建嵌套Struct的Array时不能使用简短的Array构造函数语法?[重复]

swift

考虑嵌套在另一个结构内的结构:

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>()

但是,为什么不能对嵌套的Struct使用简写初始化程序呢?


阅读 245

收藏
2020-07-07

共1个答案

一尘不染

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

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

typealias Struct2 = Struct1.Struct2

var struct2Array = [Struct2]()
2020-07-07