Apple Developer Program

Como elegir una membresía adecuada a nuestro perfil de desarrollador iOS

¿Como instalar nuestra aplicación movil en un iPhone?

No dejes a tu aplicación encerrada en el iOS simulator del Xcode!

martes, 1 de septiembre de 2015

Objective-C primeros pasos

¿Cual es el "ABC" del lenguaje objective-c? ¿Como se instancia una clase? ¿Cuales son los tipo de datos fundamentales? ¿Como se recorre un array? ¿Como se escribe en un log?¿Que es una interfaz?¿Que es un protocolo?¿Que son los Selectores?

Con algunas de estas preguntas, vamos a hacer un ejercicio, y compartirlo  en GutHub, que muestra estos componentes funcionando.


Comencemos:

El fuente completo se puede encontrar en GitHub https://github.com/PabloEzequiel/iOS/tree/master/Ejercicio01
La clase principal donde se ve la sintaxis




   


@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    /**
     * INSTANCIAMOS OBJETOS
     */
    
    Persona *persona;

    // Nota: el new hace un alloc y un init. ..
    // No siempre se usa new, porque hay constructores ....
    
    //  persona = [Persona new];
    persona = [[Persona alloc] init];
    
    
    // LLamo a metodos:
    [persona metodo];
    
    
    /**
     * INVOCAMOS METODOS CON SELECTORES
     */
    
    SEL selector1 = @selector(metodo);
    SEL selector2 = @selector(metodoParaSelector);
    
    [persona performSelector:selector1];
    [persona performSelector:selector2];
    
    [persona metodo];
    //     [persona metodoParaSelector];   // El compilador no me deja. ...
    
    
    
    /**
     * USO DE PROTOCOLOS
     */
    
    // Con el id es la forma mas normal de utilizarlo porque lo que mas no interesa que es que conforme el protocolo ...
    
    id var;
    
    var = [Persona new];
    
    [var saludar];
    
    
    // [var saludarOpcional];  // Revienta en tiempo de ejecucion ....
    
    
    
    SEL selectorOpcioneal = @selector(saludarOpcional);
    
    if ([var respondsToSelector:selectorOpcioneal]) {
        [var saludarOpcional];
    } else {
        NSLog(@"Opcional no implementado");
    }
    
    
    // NSString *string = [[NSString alloc] initWithFormat:<#(nonnull NSString *), ...#>];
    
    
    
    //    self.loginService = [LoginService new];
    
    // Secuencia:
    
    // alloc init
    // viewDidLoad
    // willAppear
    //
    
    // nil ... es en realidad un objeto .. que si le envias un mensaje (cualquiera)...  te retorna nil .
    
    
    // UN PARA DE OBJETOS INTERESANTES QUE VIENEN CON EL KIT:
    // NSNumber *  : Lo podes instanciar con distintos tipos ....
    
    NSNumber *uno     = [NSNumber numberWithInt:1];
    NSNumber *unoOtro = @(1);
    
    if (uno == unoOtro) {
        NSLog(@"Son Iguales");
    } else {
        NSLog(@"NO Son Iguales");
    }
    

    // No son mutables.. o sea que despues no lo podes cambiar ....
    // No hay que usar esto porque anda de casualidad
    
    if ([uno isEqual:unoOtro]) {
        NSLog(@"Son Iguales");
    } else {
        NSLog(@"NO Son Iguales");
    }
    
    
    
    if ([uno isEqual:unoOtro]) {
        NSLog(@"Son Iguales");
    } else {
        NSLog(@"NO Son Iguales");
    }
    
    
    //  [[NSDate *date]]
    
    
    //   Colecciones
    //   Tenes dos tipos de Array ....
    //     A estas colecciones no les puede agregar nada una vez que las tenes
    //     NO SON MUTABLES ::::: !
    //     SIRVE por ejemplo si venis desde la base de datos ... y no queres que te los toquen... es bueno que no te lo toquen....
    //          asi evitas que una clase te lo haga percha ....
    
    
    NSArray        *arrayCopados         =  @[@(1), @(2), @(3)];
    NSMutableArray *arrayCopadosMutalbes =  @[@(1), @(2), @(3)].mutableCopy;
    
    
    NSDictionary *dictionaryCopara = @{@"Hola": @(1)}.mutableCopy;
    
    
    NSLog(@"AAA!!! %@", [dictionaryCopara objectForKey:@"Hola"]);
    
    
    for (id obj in arrayCopadosMutalbes ) {
        
        NSLog(@"BBB!!! %@",obj);
    }
    
    NSArray *array;
    NSDictionary *dictionary;
    NSSet *set;
    
    NSValue *valueWithPointer; // :<#(nullable const void *)#>;
    
    
    // Estos... los mutables les podes sacar y poder elementos ...
    
    NSMutableArray *array2;
    NSMutableDictionary *dictionary2;
    
    
    NSMutableArray *mutableArray  = [ NSMutableArray array];
    [mutableArray addObject:@(1)];
    [mutableArray addObject:@"Un Strnge"];
    [mutableArray addObject:[Persona new]];
    
    
    
    
    NSMutableSet *set2;
    
    
    // Coredata es la herramienta de persistencia de Objetive C...
    // Tiene una herramienta asociada con el XCODE que te devuelve el C...
    
    // [[set alloc] init];
    
    
    // Todo los metodos tiene un metodo "description" que es la version de toString
    NSLog(@"hola");
    
    
    NSLog(@"SALLUDADDOR!!! %@", [Persona new]);
    
    
    // Para no have un %f para float ... es mas comodo :
    
    NSLog(@"FLOAT COMODO: %@", @(1.3));
    
    
    // OTRA
    Class clase = [@"hola"  class];
    id hola = [clase new];
    if ([@"hola" isKindOfClass:clase]) {
        
    };
    
    
    // Se puede utilizar tambien la clase NSError
    // NSError *
    
    

}







La interfaz Persona
   

#import 
#import "Protocolo.h"

@interface Persona : NSObject 


- (void) metodo;

@end




La implementacion Persona
   



#import "Persona.h"
#import "Protocolo.h"

@implementation Persona

- (void) saludar{
    
    NSLog(@"saludar ... respeto al protocolo .... ");
    
    
};


- (void) metodo {
    
    NSLog(@"Hola Que tal .");
    
};


// Este metodo no lo agrego a la interfaz
// con los cual el compilador no me dejara ...
// pero el selector si me va a permitir ...
- (void) metodoParaSelector {
    
    NSLog(@"Hola Que tal metodoParaSelector");
    
};



//ES EL TO STRING
- (NSString* ) description {
    
    NSLog(@"hola");
    
    return @"SOY EL toString() o description de la clase persona";
    
};

@end





Protocolo que debe respetar la clase Persona
   


#import 

@protocol Protocolo 

- (void) saludar;

@optional

- (void) saludarOpcional;

@end








La salida que genera
   

Ejercicio01[40841] Hola Que tal .
Ejercicio01[40841] Hola Que tal .
Ejercicio01[40841] Hola Que tal metodoParaSelector
Ejercicio01[40841] Hola Que tal .
Ejercicio01[40841] saludar ... respeto al protocolo .... 
Ejercicio01[40841] Opcional no implementado
Ejercicio01[40841] Son Iguales
Ejercicio01[40841] Son Iguales
Ejercicio01[40841] Son Iguales
Ejercicio01[40841] AAA!!! 1
Ejercicio01[40841] BBB!!! 1
Ejercicio01[40841] BBB!!! 2
Ejercicio01[40841] BBB!!! 3
Ejercicio01[40841] hola
Ejercicio01[40841] hola
Ejercicio01[40841] SALLUDADDOR!!! SOY EL toString() o description de la clase persona
Ejercicio01[40841] FLOAT COMODO: 1.3





El fuente completo se puede encontrar en GitHub https://github.com/PabloEzequiel/iOS/tree/master/Ejercicio01