【问题标题】:Creating NSInteger category创建 NSInteger 类别
【发布时间】:2011-03-15 21:51:19
【问题描述】:

当试图为 NSInteger 创建一个类别时,编译器会抱怨它“找不到 'NSInteger' 的接口声明”。是不是不能创建一个NSInteger类别?

一个简单的测试会显示编译器错误:

#import <Foundation/Foundation.h>

@interface NSInteger (NSInteger_Extensions)

-(NSInteger)simpleTest;

@end



#import "NSInteger_Extensions.h"

@implementation NSInteger (NSInteger_Extensions)

-(NSInteger)simpleTest {
    return self + 5;
}

@end

这应该可以吗?

谢谢!

【问题讨论】:

    标签: objective-c cocoa categories nsinteger


    【解决方案1】:

    NSInteger 不是接口。所以这是不可能的。

    http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html

    从上面的链接:

    Used to describe an integer.
    
    #if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
    typedef long NSInteger;
    #else
    typedef int NSInteger;
    #endif
    

    PS: 但是您可以将类别设为NSNumber。我想这是你想做的事

    【讨论】:

    • 噢!谢谢。我真是个傻瓜。
    • 啊--这是一个好点。我实际上正要编写一个函数来接受我的 int,它是否有效并返回它,但 NSNumber 类别实际上对我来说更有用一点。谢谢!
    • 您可能真的不想向NSNumber 添加方法。如果你真的认为你这样做了,那么请确保在它们前面加上一些独特的东西; -hooli_myMagicMethod.
    【解决方案2】:

    NSInteger 只是基本类型int 的类型定义。由于它不是对象,因此您无法向其添加类别。

    您可以改为将其添加到 NSNumberNSValue

    【讨论】:

    • 我向 Andrew 回应我的声明.. Doh!
    猜你喜欢
    • 2011-06-22
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多