【问题标题】:Why can't I use the short Array constructor syntax when creating an Array of a nested Struct? [duplicate]为什么在创建嵌套结构的数组时不能使用短数组构造函数语法? [复制]
【发布时间】:2016-08-19 14:36:13
【问题描述】:

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

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

但是为什么我不能对嵌套结构使用速记初始化器呢?

【问题讨论】:

  • @MartinR 啊,我想我应该搜索一般的嵌套类型。我虽然这只是结构的问题。谢谢。
  • @MartinR 不错。现在我们有了 bugs.swift.org,他仍然应该提交一个 bug;它的响应速度要快得多。
  • 有时我觉得我花更多的时间寻找重复而不是回答...... :) - 在这种情况下,搜索 [swift] nested type array 立即成功。
  • 在 Swift.org bugs.swift.org/browse/SR-2428打开了一张票

标签: arrays swift struct


【解决方案1】:

这只是语言中的一个漏洞。毕竟,[Type] 语法只是语法糖;正如你所说的那样,如果你使用Array&lt;Type&gt; 的真正语法,或者使用[Type] 但不是作为构造函数,那么没有问题。您也可以使用类型别名来解决它:

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

typealias Struct2 = Struct1.Struct2

var struct2Array = [Struct2]()

【讨论】:

  • 并通过 bugs.swift.org 提交错误。
  • 谢谢马特!我正要问我是否应该在 Swift Jira 板上提交一张票。现在就可以了。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
相关资源
最近更新 更多