【问题标题】:Is it possible to create an action that can receive different types of parameters? (Xcode)是否可以创建一个可以接收不同类型参数的动作? (Xcode)
【发布时间】:2012-11-30 21:58:24
【问题描述】:

如果有可能做一个可以接收不同类型对象的动作,我会很伤心。例如,如果我想将 UILabels 和 UIButtons 传递给同一个动作,但一次只有一个。我不想要的是这样的:

- (void)actionInitWithButton:(UIButton *)button Label:(UILabel *)label;

更多类似的东西:

- (void)actionInitWithObject:(UniversalObject *)object;

提前致谢:)

【问题讨论】:

    标签: xcode object parameters universal


    【解决方案1】:

    在 Objective-C 中,它们被简单地称为id。这是语言的主要概念。

    替代方案是NSObject,但这通常用于子类化——id 涵盖的范围更广,因为并非所有(但大多数)对象都继承自 NSObject

    例如

    - (void)actionInitWithObject:(id)something
    {
        if([something isKindOfClass:[UIButton class])
        {
            UIButton *button = (UIButton *)something;
            ...
        } else if ([something isKindOfClass:[UILabel class]) {
            UILabel *label = (UILabel *)something;
            ...
        }
     }
    

    【讨论】:

    • 非常感谢 :)...我的下一个问题是现在我无法在 id 对象上找到中心...您知道在这里做什么吗
    • 如果您要将id 视为除通用指针之外的任何内容,则需要对其进行强制转换。 XCode 将允许您将 id 强制转换为任何对象,因此您需要防止运行时异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 2022-01-25
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多