Blatt 1 Aufgabe 2 a

iOS-Praktikum
Blatt 1 Aufgabe 2 a
Aufgabe
Legen Sie ein Objective-C-Projekt an.
Legen Sie die Objective-C-Klassen für Personen und
Studenten an. Schreiben Sie nun eine Swift-Klasse,
die eine Notenliste von Studenten verwaltet.
Schreiben Sie dann eine Main- Methode in ObjectiveC, in der die Notenliste mit Inhalt befüllt und
abgefragt wird.
Person & Student
@interface Person : NSObject
-(id) initWithName:(NSString *)name
profession:(NSString *)profession age:
(NSInteger)age height:(NSNumber *)height;
// readwrite default wert, darum rauslassen
@property (nonatomic) NSString *name;
@property (nonatomic) NSString *profession;
@property (nonatomic) NSInteger age;
@property (nonatomic) NSNumber *height;
————————————————————————————————————————————
@interface Student : Person
-(id)initWithStudentName:(NSString *)name age:(NSInteger)age
height:(NSNumber *)height matriculationNumber:
(NSInteger)matriculationNumber major:(NSString *)major;
@property(nonatomic, assign) NSInteger matriculationNumber;
@property(nonatomic, strong) NSString *major;
————————————————————————————————————————————————————————
@implementation Student
const NSString *STUDENT_PROFESSION = @"Student";
@implementation Person
-(id)initWithName:(NSString *)name
profession:(NSString *)profession age:
(NSInteger)age height:(NSNumber *)height {
self = [super init];
if (self) {
_name = name;
_profession = profession;
_age = age;
_height = height;
}
}
return self;
-(id)initWithStudentName:(NSString *)name age:(NSInteger)age
height:(NSNumber *)height matriculationNumber:
(NSInteger)matriculationNumber major:(NSString *)major
{
self = [super initWithName:name
profession:STUDENT_PROFESSION age:age height:height];
if(self){
}
}
_major = major;
_matriculationNumber = matriculationNumber;
return self;
Report.swift
// Klasse muss mit @objc annotiert sein und muss NSObject erben sonst würden die ObjC
Klassen diese Swift-Klasse nicht erkennen
@objc class Report: NSObject {
private(set) var overview: [Int: Float] = [:];
// ‚for': externer variablen name, 'student': interner variablen name
func add(grade: Float, for student: Student) {
overview[student.matriculationNumber] = grade
}
}
Bridging-Header
•
Student wird durch den Header in der Swift-Klasse erkannt
#import "Student.h"
Build Settings > Package
•
Defines Module = YES
•
Product Module Name = [NameDesSwiftModules]
Main
#import <Foundation/Foundation.h>
#import "Student.h"
// importiert das Swift module, dass separat gebaut wird und die swift
klasse enthält
// dazu bei Built Settings im Packaging defines Modules auf YES setzen
und einen Namen bei Product Module Name eingeben
// Suffix ‚-Swift.h‘ wird von ObjC vorgegeben
#import "StudentDemoObjC-Swift.h"
int main(int argc, const char * argv[]) {