【问题标题】:Writable keypath with undefined Class具有未定义类的可写键路径
【发布时间】:2018-08-29 00:37:51
【问题描述】:

我需要一个可写键路径数组来编辑变量,但类未定义。我怎么能做这样的事情?

var properties: [ WritableKeyPath< AnyClass, Double > ]

properties.append( \Class1.tag )
properties.append( \AnyClass2.volume )

func setPropertie (keyIndex: Int, value : Double) {
    anyObject[keyPath: properties[keyIndex] ] = value
}

在这种情况下,尝试追加(\Class1.tag)得到这个错误:类型'AnyClass'(又名'AnyObject.Type')没有成员'threshold'

【问题讨论】:

    标签: ios swift swift4 keypaths


    【解决方案1】:

    您的 WritableKeyPath&lt;AnyClass,Double&gt; 被设置为 AnyClass 但您放置的是特定于类的键路径。

    Class1 as AnyClass 将无法访问它的 tag 对象。
    同样,AnyClass2AnyClass 也将无法访问它的 volume 对象。
    因此\Class1.tag\AnyClass2.volume 不适用于WritableKeyPath&lt;AnyClass,Double&gt;

    你可以做的是:

    var properties = [AnyKeyPath]()
    properties.append(\Class1.tag)
    properties.append(\AnyClass2.volume)
    

    【讨论】:

    • anyVar[keyPath: properties[index] ] = 50 ... 现在我得到这个:“无法分配给'Any?'类型的不可变表达式"
    • @Fischer 嗯...现在是个问题。阅读:forums.developer.apple.com/thread/80268。您可以存储AnyKeyPaths 以​​供阅读,但在写作方面......我不知道该怎么做。尽管如此,我还是会尝试,如果找到什么,我会回来的。
    • @Fischer 似乎已经有一个 question here 与您的下一个障碍有关,但到目前为止尚未得到答复。
    • @Fischer 那么这里有什么进展吗?你以后怎么知道哪个keyIndex 会给你与它各自的类相关联的keyPath?因为如果您打算拥有一组通用的WritableKeyPaths,我可以看到这会变得非常混乱;假设这是可能的,但现在不是。你确定你走的是正确的path(双关语)?
    • 什么都没有。我决定更改标签提供的索引之间的代码切换。使用 keyIndex 会更好。现在我有更多的代码行,但对我有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 2020-03-07
    相关资源
    最近更新 更多