gpt4 book ai didi

iphone - for 循环 - 忽略对象类型?

转载 作者:太空狗 更新时间:2023-10-30 03:35:42 24 4
gpt4 key购买 nike

我有时喜欢将 IB 元素组织到 NSArray 中,主要是为了帮助我组织我的元素。最常见的是,不同类的对象将它们放入同一个数组中。虽然这 是一种方便的组织方式,但我似乎无法理解为什么我有这样的数组:

NSArray *array = [NSArray arrayWithObjects:((UITextField *)textField), ((UISegmentedController *)segmentedController), nil];

当我像这样放置 for 循环时,为什么会收到“不响应选择器”消息:

for (UITextField *text in array) {
[text setText:@""];
}

for 循环似乎传递了不属于 UITextField 类的对象。

如果指定数组中的所有对象都通过循环传递,那么声明对象的类有什么意义?

编辑 仅供引用,这是我目前的处理方式:

for (id *object in array) {
if ([object isMemberOfClass:[UITextField class]]) {
foo();
} else if ([object isMemberOfClass:[UISegmentedController class]) {
bar();
}
}

最佳答案

当你做的时候

for (UITextField *text in...

数组中的对象指针被强制转换为 UITextField* 类型 - 因此,如果对象实际上不是 UITextField,则如果您尝试调用 UITextField 方法,可能会发生各种奇怪的事情。

所以改为使用 id 类型(不需要 *,顺便说一句):

for (id obj in array)

然后像您一样检查类型并调用适当的方法。或者,过滤数组以仅获取特定类型的对象,然后仅遍历该类型:

for (UITextField* text in [array filteredArrayUsingPredicate:...])

编辑:这里是构建类过滤器谓词的方法:

Is it possible to filter an NSArray by class?

关于iphone - for 循环 - 忽略对象类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7099913/

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