objective-c – 在可可中定义自己的关键路径 *** 作符

objective-c – 在可可中定义自己的关键路径 *** 作符,第1张

概述可以定义自己的键路径运算符,如@avg,@sum等… 简短答案:Kinda.你可以覆盖valueForKeyPath:拦截你的自定义运算符或转发到超级,但这可能是有问题的(我将把说明作为一个练习给读者). 很长的回答:是的,可以,但它依赖于使用私有行为(而不是私人的api). 在对NSArray进行了一些整洁的反省之后,我发现了一些私有的方法: _distinctUnionOfSetsForKey 可以定义自己的键路径运算符,如@avg,@sum等…解决方法 简短答案:Kinda.你可以覆盖valueForKeyPath:拦截你的自定义运算符或转发到超级,但这可能是有问题的(我将把说明作为一个练习给读者).

很长的回答:是的,可以,但它依赖于使用私有行为(而不是私人的API).

在对NSArray进行了一些整洁的反省之后,我发现了一些私有的方法:

_distinctUnionOfSetsForKeyPath:_distinctUnionOfObjectsForKeyPath:_distinctUnionOfArraysForKeyPath:_unionOfSetsForKeyPath:_unionOfArraysForKeyPath:_unionOfObjectsForKeyPath:_minForKeyPath:_maxForKeyPath:_countForKeyPath:_avgForKeyPath:_sumForKeyPath:

好,整齐!这些方法似乎与您可以与集合使用的运算符相匹配:@sum,@min,@max,@distinctUnionOfObjects等.@已经被下划线替换,并且已经有ForKeyPath:追加.

所以似乎我们可以创建一个新的方法来匹配相应的签名,我们很好去.

所以:

@interface NSArray (CustomOperator)- (ID) _fooForKeyPath:(Nsstring *)keyPath;@end@implementation NSArray (CustomOperator)- (ID) _fooForKeyPath:(Nsstring *)keyPath {  //keyPath will be what comes after the keyPath.  In this example,it will be "self"  return @"Hello World!";}@endNSArray * array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];NSLog(@"%@",[array valueForKeyPath:@"@foo.SELF"]); //logs "Hello World!"

它有效,但我不知道我会依靠这个,因为它依赖于未来可能会改变的实现细节.

总结

以上是内存溢出为你收集整理的objective-c – 在可可中定义自己的关键路径 *** 作符全部内容,希望文章能够帮你解决objective-c – 在可可中定义自己的关键路径 *** 作符所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1030500.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存