如何解决使用函数参数作为动态变量
@dynamicmemberLookup
final class Fuzzy {
private var backing: [String: String] = [:]
subscript(dynamicmember key: String) -> String? {
get {
return backing[key]
}
set {
backing[key] = newValue
}
}
}
let fuzz = Fuzzy()
func worksFine() {
fuzz.hello = "hi :)"
print(fuzz.hello!)
}
// *** HERE WOULD LIKE TO PASS ARG DYNAMICALLY
func canThisWork(with arg: String) {
print(fuzz\.arg)
}
解决方法
如果只想访问该值,则可以使用KeyPath:
func canThisWork(with arg: KeyPath<Fuzzy,String?>) {
print(fuzz[keyPath: arg]!)
}
或者WritableKeyPath,如果您也想对其进行突变:
var fuzz = Fuzzy()
func canThisWork(with arg: WritableKeyPath<Fuzzy,String?>) {
fuzz[keyPath: arg] = "hi :)"
print(fuzz[keyPath: arg]!)
}
在两种情况下,您都应像这样调用函数:
canThisWork(with: \.hello)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。