【问题标题】:How create a type like AnyHashable in Swift?如何在 Swift 中创建像 AnyHashable 这样的类型?
【发布时间】:2021-05-09 17:30:44
【问题描述】:

在 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 构造的类型..

【问题讨论】:

    标签: swift constructor init


    【解决方案1】:

    你需要让你的类型符合ExpressibleByStringLiteral

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

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

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

    【讨论】:

    • 感谢您的回复。但是如果我要输入P.init(QLiteral value: Q){},没有ExpressibleByQLiteral,该怎么做呢?
    • 你的问题是关于字符串的,所以这就是我的回答。但是您需要自己创建包含该 init 方法的协议,然后由符合标准的类在 init(QLiteral:) 中将 Q 转换为自身
    猜你喜欢
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    相关资源
    最近更新 更多