Objective-C 判断参数是否为对象

发布于 2024-08-30 21:36:29 字数 169 浏览 6 评论 0原文

在 Objective-c 中我有这个函数原型: -(NSString*)formatSQL:(NSString*)sql, ... 我可以向该函数传递任何类型的参数:NSString、NSNumber、integer、float 如何在函数中确定参数是对象(NSString..)还是基元(整数...)? 谢谢 布洛赫海盗

in Objective-c I have this function prototype:
-(NSString*)formatSQL:(NSString*) sql, ...
I may pass to this function any type of parameters: NSString, NSNumber, integer, float
How can I determine in the function if a parameter is an object (NSString..) or a primitive (integer...)?
thanks
BrochPirate

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

三寸金莲 2024-09-06 21:36:29

如果您要拥有接受多种类型的参数,则只能使用 Obj-C 对象安全地实现,这意味着使用 id 作为类型。您无法安全地将 idfloatinteger 等混合。

如果您包装了所有 floatNSNumber 中的 int ,您可以使用如下方法:

- (NSString *)formatSQL:(id)obj
{
    if ([obj isKindOfClass:[NSString class]]) {
        // Format as a string
    }
    else if ([obj isKindOfClass:[NSNumber class]]) {
        // Further processing will be required to differentiate between ints and floats
    }
}

使用 isKindOfClass: 有一些注意事项,但这应该有用作为一个好的起点。

If you're going to have a parameter that accepts multiple types, you can only safely do it by using Obj-C objects, which means using id as the type. You can't safely inter-mingle id with float, integer etc.

If you wrapped up all floats and ints in NSNumbers, you could have a method like so:

- (NSString *)formatSQL:(id)obj
{
    if ([obj isKindOfClass:[NSString class]]) {
        // Format as a string
    }
    else if ([obj isKindOfClass:[NSNumber class]]) {
        // Further processing will be required to differentiate between ints and floats
    }
}

There are a few caveats to using isKindOfClass:, but this should serve as a good starting point.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文