首页 > 解决方案 > 如何在 Swift 中创建像 AnyHashable 这样的类型?

问题描述

在 Swift 中,我们有AnyHashable类型擦除包装器,它可以从任何可散列的具体类型构造。 var ah: AnyHashable {"..."/*hashable string type*/}

但是当我创建如下结构时:

struct Demo{
    init(_ value: String){...}
}

var demo: Demo {"..."} // Cannot convert return expression of type 'String' to return type 'Demo'

为什么?以及如何创建可以从String..构造的类型

标签: swiftconstructorinit

解决方案


您需要使您的类型符合ExpressibleByStringLiteral

struct Demo: ExpressibleByStringLiteral {
    init(_ value: String) {
        //...
    }

    //Conform to ExpressibleByStringLiteral:
    init(stringLiteral value: String) {
        self.init(value)
    }
}

现在您可以使用字符串对其进行初始化

var demo: Demo {"..."}
var demo2: Demo = "demo"

推荐阅读