Swift 用户定义的 Type 可以命名为 `Type` 吗?

问题描述 投票:0回答:1

我想在我的一个对象中创建一个名为

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` 
可以编译?

swift types namespaces reserved-words backticks
1个回答
0
投票

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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.