在属性上调用方法

时间:2015-09-07 21:33:48

标签: objective-c methods properties key-value-observing

有没有办法在属性上调用或传递方法。我理解如何设置和获取属性,但我如何操纵它们?我试图使用面向对象的编程来删除字符串上的标点符号。从输入字符串中删除标点符号的行为被写为一种方法。

的main.m

TDItem *newItem = [[TDItem alloc] init];

[newItem setItemString:@"Get the mail next Tuesday!"];
NSLog(@"\nCreated Item: %@", [newItem itemString]);

NSString *itemStringWithoutPunctuation = [[NSString alloc] init];
[newItem itemStringWithoutPunctuation:[newItem itemString]];
[newItem setItemString:itemStringWithoutPunctuation];
NSLog(@"\nCreated Item: %@", [newItem itemString]);

TDItem.h

@interface TDItem : NSObject

@property NSString *itemString;


// Formating methods
- (NSString *)itemStringWithoutPunctuation:(NSString *)itemString;

TDItem.m

- (NSString *)itemStringWithoutPunctuation:(NSString *)itemString
{
NSString* itemStringWithoutPunctuation = [[itemString componentsSeparatedByCharactersInSet:[[NSCharacterSet letterCharacterSet] invertedSet]] componentsJoinedByString:@" "];
return itemStringWithoutPunctuation;
}


调试控制台为新的itemString值打印一个空白。

Debuger

Created Item: Get the mail next Tuesday!
Created Item: 

如果这完全错误了怎样改变房产价值?

1 个答案:

答案 0 :(得分:0)

回答您的问题:

NSString *itemStringWithoutPunctuation = [[NSString alloc] init]; // note: immutable string
[newItem itemStringWithoutPunctuation:[newItem itemString]]; // does NOT save the result!
[newItem setItemString:itemStringWithoutPunctuation]; // sets itemString to the empty string
NSLog(@"\nCreated Item: %@", [newItem itemString]);

相反,这样做:

NSString* itemStringWithoutPunctuation = [newItem itemStringWithoutPunctuation:[newItem itemString]];
[newItem setItemString:itemStringWithoutPunctuation];
NSLog(@"\nCreated Item: %@", [newItem itemString]);

注意:属性具有更方便的语法

由于itemString是一个属性,因此您可以使用.语法更清晰地访问它:

newItem.itemString = @"Hello, world" ;
NSLog ( @"The string is: %@" , newItem.itemString ) ;

注意:放置代码的替代位置

为什么itemStringWithoutPunctuationNewItem类的实例方法?它没有意义,特别是要求你传递该字符串。

您可能希望这样做:

@interface NSString (MyCustomAdditions)
- (NSString*) stringByRemovingPunctuation ;
@end

@implementation NSString (MyCustomAdditions)
- (NSString*) stringByRemovingPunctuation {
    return [[self componentsSeparatedByCharactersInSet:[[NSCharacterSet letterCharacterSet] invertedSet]] componentsJoinedByString:@" "];
}
@end

// elsewhere...
NSString* itemStringWithoutPunctuation = [newItem.itemString stringByRemovingPunctuation] ;
newItem.itemString = itemStringWithoutPunctuation ;

或者,你可以这样做:

@interface TDItem : NSObject
@property NSString* itemString ;
- (NSString*) itemStringWithoutPunctuation ;
@end

// elsewhere
TDItem * item = [ [TDItem alloc] init ] ;
NSLog ( @"The string is: %@" , item.itemString ) ;
NSLog ( @"The string, without punctuation, is: %@" , [item itemStringWithoutPunctuation] ) ;

但是,我要提醒您:删除标点符号的代码可能不会按照您的想法执行,但您很快就会发现这一点,然后就可以解决它。