【问题标题】:Class with defined static constant values in Objective-C在 Objective-C 中定义静态常量值的类
【发布时间】:2013-04-11 12:40:10
【问题描述】:

我想创建一个包含可从所有项目访问的静态值的类。

伪代码:

class Constants:
  constant String API_URL : "http://api.service.com"
  constant Integer SOME_VALUE : 7

如何使用Objective-C 做到这一点?

【问题讨论】:

    标签: objective-c static constants


    【解决方案1】:

    您的问题的答案是 extern 关键字。我会用一个例子向你解释。在您的项目中添加目标 c 类并将它们命名为 Common ,现在在 Common.h 中

         @interface Common : NSObject
    
         extern NSString *SiteApiURL;
    
         @end
    

    使用 extern 关键字定义 NSString 类的实例后,您需要切换到 Common.m 类并初始化 NSString (SiteApiURL) 的值

         #import "Common.h"
    
         @implementation Common
    
         NSString *SiteApiURL = @"http://api.service.com";
    
         @end
    

    像这样在 project-Prefix.pch 文件中导入 Common.h 类

        #import <Availability.h>
    
        #ifndef __IPHONE_3_0
        #warning "This project uses features only available in iOS SDK 3.0 and later."
        #endif
    
        #ifdef __OBJC__
            #import <UIKit/UIKit.h>
            #import <Foundation/Foundation.h>
            #import "Common.h"
        #endif
    

    全部完成,现在您可以在整个项目的任何地方使用对象“SiteApiURL”,并且无需在任何地方导入任何类,即您可以直接在项目的任何地方使用此变量。

    【讨论】:

      【解决方案2】:

      你可以使用预处理器来做到这一点:

      #define API_URL @"http://api.service.com"
      #define SOME_VALUE (7)
      

      访问定义很简单:[object do:API_URL];

      或者你可以使用常量

      NSString * const apiURL = @"http://api.service.com";
      NSNumber * const someValue = @7;
      

      访问常量就像访问变量一样,所以字符串只是一个简单的调用。 NSNumber 是原语的对象包装器,因此您需要像这样访问它:someValue.intValue

      【讨论】:

      • 值得注意的是,作为风格问题(并避免错误蔓延),那些#defines 应该是,例如#define SOME_VALUE (7)。对于非嵌入式应用程序,我也强烈反对这种做法,因为它没有经过类型检查,而且静态变量的内存开销对于 iOS/OS X 来说真的不是什么大问题。
      • 好点。只是想为他抛出一些选择。已编辑。
      • 对于将来遇到此问题的任何人。常量绝对是首选方法。常量允许编译器为您进行一些优化,而定义只是通过自动完全通用的代码来改善您的体验。
      【解决方案3】:

      您可以使用所有必需的常量 Here is a sample 创建一个 Singleton

      如果您不想创建类,则可以使用静态私有变量和静态 getter。

      @interface
      
      +(NSString*) getValue;
      
      @end
      
      
      @implementation
      
      static NSString *_value = @"....";
      
      +(NSString*) getValue {
         return _value;
      }
      
      @end
      

      【讨论】:

      • 我不需要初始化类 - 我只想以静态方式访问属性。
      猜你喜欢
      • 2012-07-14
      • 1970-01-01
      • 2011-08-27
      • 2011-02-06
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多