swift - 如何在 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
..构造的类型
解决方案
您需要使您的类型符合ExpressibleByStringLiteral
struct Demo: ExpressibleByStringLiteral {
init(_ value: String) {
//...
}
//Conform to ExpressibleByStringLiteral:
init(stringLiteral value: String) {
self.init(value)
}
}
现在您可以使用字符串对其进行初始化
var demo: Demo {"..."}
var demo2: Demo = "demo"
推荐阅读
- arrays - 如何从 Microsoft 认知服务的响应中获取价值
- ruby - 项目在一台计算机上运行,但在另一台计算机上运行
- python - 为什么 math.isclose() 无法检测到非常大的值之间的微小差异?
- swift - Swift 类型检查器拒绝将具有类要求的协议作为类类型
- python - 在 Tensorflow 中使用 TPU 时,在本地驱动器中保存检查点是否有一个不错的解决方法?
- excel - 比较 2 个单元格之间的值,其中一个单元格具有自定义数字格式
- maven - 问题:Maven 编译抛弃 pom,“无法从/向中央传输……”
- asp.net-mvc - 保存在文档数据库或 Azure 表中的 Asp.Net MVC 信号 R 聊天消息
- ruby - If vs if then 语句
- pattern-matching - 使用模式匹配检查均匀长度