【问题标题】:iOS - how do I create a "utility" class that all my controllers can calliOS - 我如何创建一个我的所有控制器都可以调用的“实用程序”类
【发布时间】:2012-07-13 20:16:02
【问题描述】:

我是 iOS 和 obctive-c 的新手,所以我不太清楚如何最好地完成这个看似简单的任务。

我想要的是用伪代码制作一个看起来像这样的类:

class UtilityClass
{
    // Have a method that I can pass parameters to 
    String doCalculation ( String art1 , String arg2 )
    {
        return arg1 + arg2;
    }
}

我的不确定是:

1) xCode 似乎倾向于以相对扁平的方式布置我的文件结构。那么我应该创建一个 utils 目录并将这个文件放在 utils/fileName 下吗?通常我习惯了至少有一些 src 目录,但到目前为止,我还没有被任何东西提示创建一个。 2) 如何从我的控制器导入和调用这个类/函数?

谢谢, 亚历克斯

【问题讨论】:

标签: objective-c ios ios5


【解决方案1】:

首先在 Xcode 中创建一个新文件并取消选中 xib 文件。随意命名项目。并从 NSObject 扩展它。

要创建静态方法,您必须将函数开头 - 替换为 + 之类

界面。类

@interface Utility : NSObject
+ (int)getNumber;
+ (void)setNumber:(int)number;
@end

.m 类

#import "Utility.h"

@implementation Utility

static int number = 1;

+ (int)getNumber {
  return number;
}

+ (void)setNumber:(int)newNumber {
  number = newNumber;
}

+ (id)alloc {
  [NSException raise:@"Cannot be instantiated!" format:@"Static class 'ClassName' cannot be instantiated!"];
  return nil;
}

@end

在任何其他 ViewController 中调用它,例如

 NSLog(@"number = %d", [Utility getNumber]);
    [Utility setNumber:3];
    NSLog(@"number = %d", [Utility getNumber]);

for details..

【讨论】:

    【解决方案2】:

    您将文件存储在哪里取决于您,只需确保 XCode 知道在哪里可以找到它们。该类本身应该像任何其他 Objective C 类一样制作,只需使其继承自 NSObject 而不是图形类之一:

    // MyClass.h
    @interface MyClass : NSObject {
        int instanceVar;
    }
    @property (nonatomic, assign) int property;
    @end
    
    // MyClass.m
    #import "MyClass.h"
    @implementation MyClass
    @synthesize property;
    -(id) init {
        ...
    }
    -(int) function  {
        ...
    }
    @end
    

    要在另一个文件中使用该类,只需像任何其他类一样导入标题

    #import "MyClass.h"
    

    【讨论】:

      【解决方案3】:

      只需创建一个名为 Utilities 的新组,然后在其中创建您的类。喜欢,

      utils.h 
      utils.m
      

      稍后在 ViewController 的头文件中添加即可。

      #import "utils.h"
      

      如果这个 utils 类被很多控制器在非常胖的项目中使用,那么,找到一个名为的文件,应该在支持文件组内。

      YourAppName-Prefix.pch
      

      在那个文件中你有一个这样的代码块,

      #ifdef __OBJC__
          #import <UIKit/UIKit.h>
          #import <Foundation/Foundation.h>
          #import <CoreData/CoreData.h>
      #endif
      

      只需编辑此块并在此处添加您的utils.h 引用,这样您的整个项目就可以创建 utils 对象而无需显式导入到它们自己的标头中。

      像这样编辑,

      #ifdef __OBJC__
          #import <UIKit/UIKit.h>
          #import <Foundation/Foundation.h>
          #import <CoreData/CoreData.h>
          #import "utils.h"
      #endif
      

      【讨论】:

      • 谢谢,常见的做法是什么?在类似 root_dir/src/utils 之类的东西下创建新组?我一直将我的控制器放在根目录中,一直感觉很时髦......在这里布置目录结构的好方法是什么?
      • 这完全取决于你,它非常灵活,你可以随意创建组。因为在导入文件时,您无论如何都不会包含这些组名。但我建议标准化你的工作方式,并在你的下一个项目中坚持下去。
      猜你喜欢
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      • 2022-07-16
      • 2021-01-24
      • 2012-09-24
      • 1970-01-01
      相关资源
      最近更新 更多