gpt4 book ai didi

swift - 通过 Swift 中的另一个类用对象的新值设置未确定的属性

转载 作者:行者123 更新时间:2023-11-30 11:05:49 25 4
gpt4 key购买 nike

我有一个情况,我希望能够通过另一个类设置对象的某些属性的值。但是:

  • 我不知道/想对正在设置的属性进行硬编码,
  • 并且不知道/想要对属性的新值进行硬编码

到目前为止,我有类ValueSetterClass:

class ValueSetterClass<V, T>: NSObject where V: NSObject {

var item: T?
private var object: V
private var key: String

init(object: V, value: (HELP ME!)) {
self.object = object
self.key = #keyPath(value)
super.init()
}

public func setValue() {
object.setValue(item!, forKey: key)
}

}

您可以在其中使用要更改的对象和应定位的属性来初始化类。打算这样称呼:

let view = UIView()
let valueSetter = ValueSetterClass<UIView, UIColor>(object: view, value: UIView.backgroundColor)
valueSetter.item = .yellow
valueSetter.setValue()

但是,我不知道应该在初始化程序中为 value 类型放置什么(我说 HELP ME! ☹️)

我知道这应该可行,因为您可以确定任何属性的键字符串:

print(#keyPath(UIView.backgroundColor)) // backgroundColor

预先感谢您的帮助!

PS我没有疯,我有充分的理由想要这样做! 😅

最佳答案

@Paulw11 解决了它。我需要使用 Swift 4 的新 KeyPath 而不是 #keyPath。

这是一个修改后的示例:

class ValueSetterClass<V, T>: NSObject where V: UIView {

var item: T?
private var object: V
private var key: ReferenceWritableKeyPath<V, T>

init(object: V, key: ReferenceWritableKeyPath<V, T>) {
self.object = object
self.key = key
super.init()
}

public func setValue() {
object[keyPath: key] = item!
}

}

let view = UIView()
let valueSetter = ValueSetterClass(object: view, key: \.backgroundColor)
valueSetter.item = .yellow
valueSetter.setValue()

谢谢!

关于swift - 通过 Swift 中的另一个类用对象的新值设置未确定的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52749276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com