swift - 如何在 Swift 中为 Dictionary 制作自定义扩展?
问题描述
我正在尝试向 Dictionary 添加一个函数,这个函数称为 add,它有 2 个输入值(键和值)。我试图使函数是通用的,这意味着我希望键和值能够采用任何类型。我结束了这个无效的代码。接下来我应该怎么做才能使这个功能起作用?
extension Dictionary {
func add<Key, Value>(key: Key, value: Value) {
self[Key] = Value
}
}
解决方案
首先,您尝试将类型而不是实例分配给字典。
没有更多上下文,表达式的类型是模棱两可的):
其次,您需要将您的方法声明为 mutating。
无法通过下标进行赋值:下标只能获取)。
第三,您正在创建两个与 Dictionary 泛型 Key 和 Value 类型无关的新泛型类型。
无法将“Key”类型的值(实例方法“add(key:value:)”的通用参数)转换为预期的参数类型“Key”(通用结构“Dictionary”的通用参数)。
extension Dictionary {
mutating func add(key: Key, value: Value) {
self[key] = value
}
}
var dict: [String: Int] = [:]
dict.add(key: "One", value: 1)
dict // ["One": 1]
推荐阅读
- javascript - 我不在 ajax 脚本文件上使用 graph mdb.js
- reactjs - 可以监控 React 应用程序的正常运行时间吗?
- c - 在 Amiga 和 68881 上使用 gcc 2.7.0 的浮点乘法错误 - 任何修复/解决方法?
- c - 如何在sketchup中获取组的材质?
- visual-studio - VS2008 上的 TFS 未连接到 dev.azure.com
- google-sheets - 如何在代码中使用 REGEXMATCH、SUM 和 ARRAYFORMULA
- javascript - 在 WKUIDelegate SwiftUI 上实现 Javascript 警报和确认?
- java - SimpleDateFormat(不是 TimeZone)支持解析哪些时区缩写?
- aws-codepipeline - 配置的 TestType 选项无效,应该是有效的 TestType。与 AWS DeviceFarm 和 AWS Code 管道集成
- typescript - 具有嵌套类型化返回对象的 ES6 打字稿实现方法不起作用。预期财产或签名