Programmieren mit Swift - Für macOS und iOS
Programmieren mit Swift - Für macOS und iOS
Klasse für den Character

Der Klasse Character kommt die Aufgabe zu, die Eigenschaften und Attribute der Spielfigur aufzunehmen. Im einzelnen sind das Stärke (strength), Geschicklichkeit (dexterity), Konstitution (constitution), Intelligenz (intelligence), Weisheit (wisdom) und Charisma (charisma). Für all diese Attribute benötigt auch die Klasse Eigenschaften und Accessor-Methoden.
In diesem Beispiel verwenden wir wirklich Accessor-Methoden und nicht die seit OS X 10.5 vorhandenen Properties. Sie brauchen sich aber nicht die Mühe machen, alles selbst zu programmieren. Das Script Menü von Xcode ist eine große Hilfe und nimmt Ihnen die meiste Arbeit ab. Alles was Sie noch tun müssen, ist die Instanzvariablen zu markieren und dann von Xcode die passenden Methodendeklarationen und Definitionen erzeugen zu lassen, wie es hier beschrieben wurde.
stacks_image_41AAC724-418B-4554-8BFE-7B5965A2EFAF
Wenn Sie den Code aus der Zwischenablage an den richtigen Stellen einfügen, sollte die Klasse so aussehen.

Die Character.h
#import <Cocoa/Cocoa.h>

@interface Character : NSObject {

NSNumber *strength;
NSNumber *dexterity;
NSNumber *constitution;
NSNumber *intelligence;
NSNumber *wisdom;
NSNumber *charisma;
}

- (NSNumber *)strength;
- (
void)setStrength:(NSNumber *)value;

- (NSNumber *)dexterity;
- (
void)setDexterity:(NSNumber *)value;

- (NSNumber *)constitution;
- (
void)setConstitution:(NSNumber *)value;

- (NSNumber *)intelligence;
- (
void)setIntelligence:(NSNumber *)value;

- (NSNumber *)wisdom;
- (
void)setWisdom:(NSNumber *)value;

- (NSNumber *)charisma;
- (
void)setCharisma:(NSNumber *)value;

@end
Die Character.m
#import "Character.h"

@implementation Character

- (NSNumber *)strength {
    return [[strength retain] autorelease];
}

- (
void)setStrength:(NSNumber *)value {
    if (strength != value) {
        [strength release];
        strength = [value copy];
    }
}

- (NSNumber *)dexterity {
    return [[dexterity retain] autorelease];
}

- (
void)setDexterity:(NSNumber *)value {
    if (dexterity != value) {
        [dexterity release];
        dexterity = [value copy];
    }
}

- (NSNumber *)constitution {
   
return [[constitution retain] autorelease];
}

- (
void)setConstitution:(NSNumber *)value {
    if (constitution != value) {
        [constitution release];
        constitution = [value copy];
}
}

- (NSNumber *)intelligence {
   
return [[intelligence retain] autorelease];
}

- (
void)setIntelligence:(NSNumber *)value {
   
if (intelligence != value) {
        [intelligence release];
        intelligence = [value copy];
    }
}

- (NSNumber *)wisdom {
    return [[wisdom retain] autorelease];
}

- (
void)setWisdom:(NSNumber *)value {
    if (wisdom != value) {
        [wisdom release];
        wisdom = [value copy];
    }
}

- (NSNumber *)charisma {
    return [[charisma retain] autorelease];
}

- (
void)setCharisma:(NSNumber *)value {
    if (charisma != value) {
        [charisma release];
        charisma = [value copy];
    }
}

@end
Auch an dieser Stelle noch ein Mal der Hinweis auf den Garbage Collector. Bei manueller Speicherverwaltung wäre diese Klasse auch dafür zuständig, dass alle von ihr verwalteten Objekte auch wieder freigegeben würden. Wie bereits angesprochen überlassen wird diese Arbeit aber dem Garbage Collector. Später werden Sie diese Klasse auch noch um weitere Eigenschaften erweitern, doch für den Moment sollte es genügen.

Der nächste Schritt ist die grafische Oberfläche.

nächste Seite