Mes débuts avec les objets
Darknight
Membre
Bonjour à tous,
Je suis de retour pour vous montrez le projet réalisé en Objet, je commence tous juste avec l'objet, et je trouve mon code un peu bizarre, je me demande si c'est la bonne méthode.
//
// MyFileClass.h
//
#import <Foundation/Foundation.h>
@interface MyFileClass : NSObject
{
// Déclaration des attributs associés à MyFileClass
NSString *path_file;
NSArray *contentFile;
}
// Déclaration des accesseurs
@property(nonatomic, retain) NSString *path_file;
@property(nonatomic, retain) NSArray *contentFile;
// Déclaration des méthodes associées à la MyFileClass
-(NSString*)userScanPath: (int)fileNumber;
-(BOOL)checkPath: (NSString*)filePath;
-(NSArray*)pathFileToStringArray:(NSString*)path;
-(NSMutableDictionary*)chearchOfOccur:(NSArray*)array;
@end
//
// MyFileClass.m
//
#import "MyFileClass.h"
@implementation MyFileClass
@synthesize path_file;
-(NSString*)userScanPath: (int)fileNumber
{
char filePath[200];
NSString *charToStringPath;
printf("Please enter the path to your file n° %i\n", fileNumber);
scanf("%s", filePath);
charToStringPath = [NSString stringWithUTF8String:filePath];
return (charToStringPath);
}
-(NSArray*)pathFileToStringArray:(NSString*)path
{
NSURL *pathUrl = [NSURL fileURLWithPath:path];
NSString *myFile = [NSString stringWithContentsOfURL:pathUrl encoding:NSUTF8StringEncoding error:nil];
NSArray *myFileByLine = [myFile componentsSeparatedByString:@\n];
return (myFileByLine);
}
-(BOOL)checkPath:(NSString*)filePath
{
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL isDir;
BOOL exist =[fileManager fileExistsAtPath:filePath isDirectory:&isDir];
BOOL writable = [fileManager isWritableFileAtPath:filePath];
if (exist)
{
NSLog(@File exists);
if (isDir)
{
NSLog(@File is a directory);
return (NO);
}
}
else
{
NSLog(@File doesn't exists);
return (NO);
}
if (writable)
NSLog (@File is writable);
else
NSLog (@File is read only);
return (YES);
}
-(NSMutableDictionary*)chearchOfOccur:(NSArray*)array
{
NSMutableDictionary *result = [NSMutableDictionary new];
for (NSString *eachLine in array)
{
NSArray *eachItem = [eachLine componentsSeparatedByString:@ :];
if ([eachLine containsString:@.])
{
NSArray *letters = [eachItem[0] componentsSeparatedByString:@.];
for (NSString* letter in letters)
{
int value = [result[letter] intValue];
value += [eachItem[1] intValue];
result[letter] = @(value);
}
}
else
{
NSArray *letters = [eachItem[0] componentsSeparatedByString:@/];
for (NSString* letter in letters)
{
int value = [result[letter] intValue];
value += [eachItem[1] intValue];
result[letter] = @(value);
}
}
}
return (result);
}
@end
//
// main.m
//
#import "MyFileClass.h"
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool
{
MyFileClass *file1 = [[MyFileClass alloc]init];
MyFileClass *file2 = [[MyFileClass alloc]init];
file1.path_file = [file1 userScanPath:1];
file2.path_file = [file2 userScanPath:2];
if ([file1 checkPath:file1.path_file] && [file2 checkPath:file2.path_file])
{
file1.contentFile = [file1 pathFileToStringArray:file1.path_file];
file2.contentFile = [file2 pathFileToStringArray:file2.path_file];
NSMutableDictionary *resultFile1 = [NSMutableDictionary new];
NSMutableDictionary *resultFile2 = [NSMutableDictionary new];
resultFile1 = [file1 chearchOfOccur:file1.contentFile];
resultFile2 = [file2 chearchOfOccur:file2.contentFile];
}
}
return 0;
}
Voila dit moi ce que vous en pensez !!!!
Merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Y'a trop de commentaires
Je t'ai fait quelques corrections dans le code. Remarque en particulier la déclaration des attributs.
N'écris pas path_file mais pathFile : c'est la convention de nommage Apple.
- (BOOL)checkPath:(NSString*)filePath
n'utilisent pas les variables d'instance. Fais-en des méthodes de classe (dont le nom commence par +).
Concernant les variables d'instances :
@ali : et du coup, dans quel cas il est préférable d'utiliser _variable plutôt que self.variable ?
Il m'arrive aussi de les utiliser dans de rares cas très spécifiques : par exemple si ma propriété représente un état de mon instance (au sens des diagrammes états-transitions), je déclenche les actions de transition dans le setter. Lorsque je veux initialiser mon instance dans un état particulier (sans déclencher une transition donc) j'utilise la variable d'instance.
ok merci