我想在我的一个对象中创建一个名为
Type
的枚举(或类或结构)。
这个对象名称无法正常输入,因为它“与‘foo.Type’表达式冲突”。
但是,与其他保留关键字一样,如果 输入反引号,它确实可以编译。
struct Foo {
// enum Type { } //ERROR: Type member must not be named 'Type', since it would conflict with the 'foo.Type' expression
enum `Type` { // Compiles with backticks...
case x
case y
}
func test() {
let x = Foo.Type // Xcode autocomplete says: "Type: `Type`" | ERROR: Expected member name or constructor call after type name
let y = Foo.Type // Xcode autocomplete says: "Type: Foo.Type" | ERROR: Expected member name or constructor call after type name
let z = Foo.Type.self // ok
}
}
但是,尝试使用我的 Type 会导致上述错误,并且似乎仍然与内置 Type 表达式冲突。类型的命名空间似乎不起作用。
名称
Type
可以用来命名用户的Swift对象吗?
如果没有,为什么
enum `Type`
可以编译?
x
函数中的 y
和 test
应该是什么?即使您将 enum
命名为 Type
之外的其他名称,我认为您的代码也不会编译:
struct Foo {
enum Axis {
case x
case y
}
func test() {
let x = Axis // Same error
let y = Foo.Axis // Same error
let z = Foo.Type.self // ok
}
}
另一方面,如果它们应该是
Type
类型的值,这对我有用:
struct Foo {
enum `Type` { // Compiles with backticks...
case x
case y
}
func test() {
let x: `Type` = .x
let y: Foo.`Type` = .y
let z = Foo.Type.self // ok
}
}