【问题标题】:Array of Nested Type: Why Does the Compiler Complain?嵌套类型数组:编译器为什么会抱怨?
【发布时间】:2016-04-21 14:56:15
【问题描述】:
class ClassA {
    class ClassB {
    }
}
let compiles: [ClassA.ClassB]
let doesNotCompile = [ClassA.ClassB]()

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

【问题讨论】:

  • 似乎是一个错误。试用最新的 Swift 工具链或在bugs.swift.org 提交错误。

标签: swift


【解决方案1】:

如您所述,它使用以下语法:

let arrayOfClassB: [ClassA.ClassB] = []

但如果我们声明typealias[]() 语法就可以工作:

typealias InnerClass = ClassA.ClassB
let arrayOfAliasesOfClassB = [InnerClass]()

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

更新:Apple 已经有 an opened bug 对此进行了讨论。

【讨论】:

    【解决方案2】:

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

    let list = Array<ClassA.ClassB>()
    

    【讨论】:

      【解决方案3】:

      compiles 是一个 ClassA.ClassB 类型的数组

      在 dosNotCompile 中,您尝试将数组用作函数。你不是说:

      let doesNotCompile = ClassA.ClassB()
      

      【讨论】:

      • 不,OP 正在尝试创建特定类型的空数组,他没有尝试创建 ClassA 或 ClassB 的实例
      猜你喜欢
      • 2012-09-12
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 2019-06-16
      • 1970-01-01
      • 2012-03-28
      • 2016-11-01
      相关资源
      最近更新 更多