Datatyper

Objective-C Datatyper og Literals

  • Man bruker snarveier som @ for å lage NSString
  • Men man kan også bruke snarveier for å lage NSNumber, NSArray og NSDictionary

NSNumber

@12      /* [NSNumber numberWithInt:12] */
@'Z'     /* [NSNumber numberWithChar:'Z'] */
@YES     /* [NSNumber numberWithBool:YES] */

Boxed Expression Literals (C kall)

@(M_PI/16) /* [NSNumber numberWithDouble:(M_PI / 16)] */

NSArray

NSArray *array = @[ @"Hello", @"Wellow", @"Cool" ]; 

/*
NSArray arrayWithObjects:@"Hello", @"Wellow", @"Cool", nil];
*/

NSLog(@"Første element: %@", array[0]);

NSDictionary

NSDictionary *dictionary = @{
	@"firstname" : @"Foo",
	@"lastname" : @"Bar",
};

/* 
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
	@"value1", @"key1", @"value2", @"key2", nil];
*/

NSLog(@"Første element: %@", dictionary["firstname"]);

Iterering

For-loop

NSArray songs = [@"Hello", @"Someday", @"Help"];

for (NSUInteger index = 0; index < songs.count; index++)
{
    loop-body
}

For-in-loop

NSArray songs = [@"Hello", @"Someday", @"Help"];

for (NSString *string in songs)
{
    // do stuff...
}

Pekere

Først og fremst, hva er disse * overalt?

Det er hvordan man definerer en peker til minnet

Dynamisk eller statisk?

Ved bruk av `id` bruker man ikke * da den har en peker automatisk

Objective-C har en dynamisk typet runtime, men man kan velge å bruke statiske typer når man skriver koden.

Det betyr at: Statisk typing er kun til for å gi deg typesikkerhet ved kompilering; alle spor forsvinner etter kompilering, foruten primitiver som ikke er pekere og derfor statiske

Eksempel

id track = [[SpotifyTrack alloc] init]; /* dynamisk typet */
SpotifyTrack *track = [[SpotifyTrack alloc] init]; /* statisk typet */
int songCount = 3; /* primitiv */
  1. id er definert som en pointer til hva som helst
  2. Hvis vi ser på initializerne ser vi at de alltid returnerer id.

Nil

  • I Objective-C bruker man nil, i stedet for null som i mange andre språk
  • Om man kaller en metode på nil får man bare nil tilbake, ingen exception!
NSString *string = nil;
NSString *low = [string lowercaseString];
NSLog(@"%@", low); // => null
  • Dette vil logge (null) uten å krœsje
  • NULL og nil kompileres begge til tallet 0, så dette er også lov:
NSString *string = 0;
NSString *low = [string lowercaseString];
NSLog(@"%@", low); // => null