有没有办法在属性上调用或传递方法。我理解如何设置和获取属性,但我如何操纵它们?我试图使用面向对象的编程来删除字符串上的标点符号。从输入字符串中删除标点符号的行为被写为一种方法。
的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:
如果这完全错误了怎样改变房产价值?
答案 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 ) ;
注意:放置代码的替代位置
为什么itemStringWithoutPunctuation
是NewItem
类的实例方法?它没有意义,特别是要求你传递该字符串。
您可能希望这样做:
@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] ) ;
但是,我要提醒您:删除标点符号的代码可能不会按照您的想法执行,但您很快就会发现这一点,然后就可以解决它。