当前位置: 首页 > 面试题库 >

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

谢唯
2023-03-14
问题内容

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

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使用简写初始化程序呢?


问题答案:

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

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

typealias Struct2 = Struct1.Struct2

var struct2Array = [Struct2]()


 类似资料:
  • 由于 Array 的构造函数在如何处理参数时有点模棱两可,因此总是推荐使用数组的字面语法 - [] - 来创建数组。 [1, 2, 3]; // 结果: [1, 2, 3] new Array(1, 2, 3); // 结果: [1, 2, 3] [3]; // 结果: [3] new Array(3); // 结果: [] new Array('3') // 结果: ['3'] // 译者

  • 错误:可能有损转换从int到短

  • 我的代码中只有参数化构造函数,需要通过它进行注入。 我想刺探参数化构造函数以注入模拟对象作为junit的依赖项。 但我们有什么东西可以在构造函数中注入模拟对象并对其进行监视吗?。

  • 问题内容: 为什么我不能在包外部使用受保护的构造函数来编写这段代码: Check.java 即使我扩大了班级,为什么仍会收到错误消息?请解释 编辑: 编译错误: 构造函数Example()不可见 问题答案: protected修饰符仅用于包中以及包外部的子类中。使用对象创建对象时,默认情况下将调用父类的构造函数。 由于父类构造函数受到保护,因此您会遇到编译时错误。您需要根据JSL 6.6.2.2调

  • 问题内容: 为什么不能和这两个一起在构造函数中使用? 合并这样的东西的原因是什么? 问题答案: 将在同一类中调用另一个构造函数,而将调用超级构造函数。如果构造函数中没有,则编译器将隐式添加一个。 因此,如果两者都允许,您最终可能会两次调用构造函数。 示例(不要在参数中寻找含义): 现在,如果调用,将调用以下构造函数: 更新 : 如果您能够使用并且可能会得到如下结果: ( 注意 :这是为了说明 如果

  • 根据我的理解,当创建了临时对象时,将调用move构造函数。这里,函数返回一个临时对象,但我的程序没有打印来自移动构造函数的消息: