代码之家  ›  专栏  ›  技术社区  ›  MurderDev

这似乎很合适。AnyHashable不能正确地用枚举大小写(as!,as?,as)

  •  0
  • MurderDev  · 技术社区  · 7 年前

    下面是一个简单的示例,说明AnyHashable不支持使用枚举强制转换。

    enum testEnum: String {
        case Test
    }
    
    let myObject: AnyHashable = testEnum.Test as AnyHashable
    let newObject = myObject as? testEnum
    

    在这种情况下,newObject将返回nil。如果我改投

    let newObject = (myObject as? AnyObject) as? testEnum
    

    它会投好的。

    let myObject: AnyHashable = "Test" as AnyHashable
    let newObject = myObject as? String
    

    这是swift中的错误还是我在这里做得不对。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Rob Napier    7 年前

    AnyHashable explicitly type-erases :

    AnyHashable类型将等式比较和散列操作转发给底层可散列值,隐藏其特定的底层类型。

    任意哈希 . 预期用途是使用 AnyHashable.init as AnyHashable .

    你的意思是:

    enum TestEnum: String {
        case test
    }
    
    let myObject = AnyHashable(TestEnum.test)
    myObject.base               // => test (as an Any)
    myObject.base as? TestEnum  // => Optional<TestEnum>(.test)
    

    任意哈希 是一种完全不同于 Any AnyObject . 后两种是协议。前者是一种类型擦除结构。前缀 Any... 在stdlib中,除了奇怪的特殊情况(你应该尽可能避免)外,它的意思是“键入橡皮擦” 任何对象