gpt4 book ai didi

iOS 遍历对象的属性并添加操作

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:23 24 4
gpt4 key购买 nike

我有一个具有多个类似属性的类 - UISliders,我想为用户开始和结束使用每个 slider 时添加操作。每个 slider 都将链接到同一个选择器,所以我想只是迭代它们而不是写出 10 个几乎相同的代码块。

问题是,最有效的方法是什么?我试过这样的事情: Loop through all object properties at runtime但问题是我无法在 objc_property_t 属性 上调用 addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents。我是否应该将属性粘贴到一个数组中并对其进行迭代?

最佳答案

如果您不需要涉及在运行时检查对象属性的动态级别,那么 NSArray 是最直接和可读的方式;就效率而言,我想制作一个类型为 void * 的动态数组并对其进行迭代可能会更快,但考虑到典型大小,以可疑的速度返回为您做更多的工作。

for (UISlider *slider in @[self.slider1, self.slider2, self.slider3]) {
[slider addTarget:self action:@selector(action:) forControlEvents:UIControlEventValueChanged];
}

如果您确实需要调查您的属性(property),那么我会按照对其他问题的建议的答案来处理它。我的回答最初建议解析属性属性字符串以说明自定义命名属性,但显然 KVC 会为您处理这个问题。

unsigned int numberOfProperties;
objc_property_t *properties = class_copyPropertyList([self class], &numberOfProperties);
for (int i = 0; i < numberOfProperties; i++) {
objc_property_t property = propertieses[i];
NSString *propertyName = [NSString stringWithUTF8String:property_getName(property)];
id valueForProperty = [self valueForKey:propertyName];
if ([valueForProperty isKindOfClass:[UISlider class]]) {
[(UISlider *)valueForProperty addTarget:self
action:@selector(action:)
forControlEvents:UIControlEventValueChanged];
}
}
free(properties);

关于iOS 遍历对象的属性并添加操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14542997/

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