gpt4 book ai didi

objective-c - valueForKeyPath 意外返回 nil

转载 作者:行者123 更新时间:2023-11-28 06:27:19 27 4
gpt4 key购买 nike

这是一个相当简短的问题,但我对如何解决它有点困惑。

for item in filteredAndSortedDates {
print(item.datesSectionHeader()) // Returns a value
print(item.value(forKeyPath: "datesSectionHeader") as Any) // Returns nil
// The "as Any" part up above is just to keep the compiler quiet. It doesn't have any meaning as this is just for testing purposes.
}

我对为什么会这样感到有点困惑。为什么 valueForKeyPath 在返回值时返回 nil ?我在 NSDictionary 上调用它。

这是我得到的日志:

HAPPENING THIS WEEK
nil
HAPPENING THIS WEEK
nil
HAPPENING THIS WEEK
nil
HAPPENING WITHIN A YEAR
nil

下面是我声明 datesSectionHeader 的方式:

extension NSDictionary {

// FIXME
func datesSectionHeader() -> String {
// Doing some work in here.
}
}

最佳答案

NSDictionary 修改键值编码的标准行为,以便它访问字典的内容而不是它的属性。它通过覆盖 value(forKey:)(反过来由 value(forKeyPath:) 使用)来实现。

作为documented ,它对 value(forKey:) 的覆盖检查键是否以“@”为前缀。如果不是,它返回 object(forKey:) 的结果,访问字典内容。如果它以“@”为前缀,它将去除“@”并返回父类(super class)实现的结果,该实现访问字典的属性。

因此,在这种特殊情况下,您可以使用以下方法访问 datesSectionHeader() getter 方法的结果:

item.value(forKeyPath: "@datesSectionHeader")

关于objective-c - valueForKeyPath 意外返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41499296/

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