2015-09-07 92 views
-1

有什麼方法可以在屬性上調用或傳遞方法。我瞭解如何設置和獲取屬性,但我如何操作它們?我正在嘗試使用面向對象的編程去除字符串上的標點符號。從輸入字符串中刪除標點符號的行爲被寫爲一種方法。在屬性上調用方法

的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

要回答你的問題:

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是一個屬性,您可以使用. synt更乾淨地訪問它斧:

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]) ; 

但是,我會告誡你的:你的代碼去除標點符號可能並不是在做你認爲它正在做的事情,但是你很快就會發現它,並且可以修復它。

+0

爲什麼你將'itemStringWithoutPunctuation'變量聲明爲'id'而不是'NSString'? – rmaddy

+0

減少打字。在許多情況下,'id'可以用來代替'MyClass *'。 – iAdjunct

+0

由於編譯器無法進行任何類型的檢查,因此使用'id'會導致各種錯誤。 – rmaddy