gpt4 book ai didi

swift - KVC 和关联类型

转载 作者:行者123 更新时间:2023-11-28 12:14:41 25 4
gpt4 key购买 nike

我有一个可绑定(bind)协议(protocol)

protocol Bindable: class {
associatedtype ObjectType: Any
associatedtype PropertyType

var boundObject: ObjectType? { get set }
var propertyPath: WritableKeyPath<ObjectType, PropertyType>? { get set }

func changeToValue(_ value: PropertyType)
}

我想要一个更改值的默认实现

extension Bindable {

func changeToValue(_ value: PropertyType) {
boundObject?[keyPath: propertyPath] = value
}
}

但这会抛出一个错误提示:

Type 'Self.ObjectType' has no subscript members

propertyPath 的定义是说它是 ObjectTypeKeyPath 那么这里发生了什么?我如何告诉编译器 propertyPath 确实是已更改对象的 keyPath。

最佳答案

我认为您不应该将 propertyPath 设为可选。这应该有效:

protocol Bindable: class {
associatedtype ObjectType: Any
associatedtype PropertyType

var boundObject: ObjectType? { get set }
var propertyPath: WritableKeyPath<ObjectType, PropertyType>{ get set }

func changeToValue(_ value: PropertyType)
}

extension Bindable {

func changeToValue(_ value: PropertyType) {
boundObject?[keyPath: propertyPath] = value
}
}

关于swift - KVC 和关联类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47175231/

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