gpt4 book ai didi

Swift:Array() 和 [OtherModule.MyType]() 有什么区别

转载 作者:行者123 更新时间:2023-11-30 10:16:42 25 4
gpt4 key购买 nike

我正在使用来自不同模块的类型,我们将其称为 OtherModule.MyType,

这段代码:

var a = [OtherModule.MyType]() 

将产生错误无效使用“()”来调用非函数类型“[MyType.Type]”的值

此代码不会:

var ax = [OtherModule.MyType]

但我相信 ax 不再是一个数组,因为这段代码

ax.append(OtherModule.MyType())

将导致错误无法使用参数列表“(MyType)”调用“append”

所以我想知道ax到底是什么?

此外,这段代码运行良好:

var ay = Array<OtherModule.MyType>()
ay.append(OtherModule.MyType())

更新:我正在使用 swift 1.2 和 Xcode 6.3

最佳答案

出于某种原因,Swift 团队最为人所知(模块的文档非常少),Module.ThingThing 的行为不同。

同时Int只是一个类型名称:

let i: Int = 1  // fine
// not fine, "expected member name or constructor call after type name"
let j = Int

Swift.Int可以是两者:

// used as a type name
let k: Swift.Int = 1
let t = Swift.Int.self

// but also used as a value
let x = Swift.Int
// equivalent to this
let y = Int.self
toString(x) == toString(y) // true

在某些用途下,它只想成为一个值,而不是类型名称。因此这是有效的:

// a will be of type [Int.Type], initialized with an array
// literal of 1 element, the Int metatype
let a = [Swift.Int]

但是尝试在此上下文中将其用作类型名称会失败: [Swift.Int]()并不比写 [1]() 更有效或let strs = ["fred"]; strs() .

这种行为看起来有点随意,甚至可能是一个错误/无意的。

因为唯一方式Swift.Int可以在这种情况下使用:

Array<Swift.Int>() 

是一种类型而不是值(因为只有类型可以在尖括号之间),这在某种程度上是有道理的,而更模糊的数组文字语法的行为有所不同。

关于Swift:Array<OtherModule.MyType>() 和 [OtherModule.MyType]() 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29607628/

25 4 0