我喜欢通过传递一个值来创建一个自定义类的实例,该值在初始化时将帮助设置它.我已经覆盖了init并且实际上将其更改为:
- (id)initWithValue:(NSInteger *)initialValue;
我想将此值存储在实例化对象的属性中,并使用该值生成将与其关联的UIImage的文件名.
我的问题是如何在Cocoa/Obj-C中最好地解决这个问题.NSInteger是我需要的最佳参数还是NSString会更好?还是有其他设计模式?我不熟悉在这种情况下可以提供帮助的所有创作方法.假设我的类属性是:
@interface MyView : UIView { UIImage *image; NSInteger value;
如果我坚持使用NSInteger的作为参数,我可以轻松地分配值给它.但是然后需要从该值生成"image12.png"(假设NSInteger = 12)来设置我的UIImage.像"image"+ initialValue +".png"之类的东西.我相信在Obj-C中详细表达如下:
NSString *myValue = @"image"; [myValue stringByAppendingString:[initialValue stringValue]]; //NSInteger may not respond to stringValue?!? [myValue stringByAppendingString:@".png"]
这是我对Obj-C的理解破裂的地方.像这样的感觉应该更容易,但我仍然感到困惑.
现在,如果initialValue是一个值为@"12"的NSString,那么它可能是?那么self.value = [initialValue integerValue];
我可以用多个stringByAppendingString调用构建图像.对于其他语言中这么简单的事情来说,这似乎很乏味.
什么是处理这样的事情的最佳方法?
你的init方法看起来很好,如果你只处理整数值,你确实想要使用NSInteger而不是NSString甚至NSNumber.您可能想要更改的一件事是您传递的参数应该是(NSInteger)
,而不是(NSInteger *)
- NSInteger不是对象,但在Objective-C中是类似的基本类型int
.
您可以使用NSString的stringWithFormat:
选择器构建映像名称,如下所示:
NSInteger myInteger = 12; NSString *imageString = [NSString stringWithFormat:@"image%d.png", myInteger];