Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03203.jsonl.gz/856

Multi-Target Swift Framework erstellen – Development
Development
Nun da wir unser Projekt eingerichtet haben, ist es Zeit etwas Code zu schreiben.
Unser Ziel ist es, so viel Sourcecode wie möglich zwischen allen drei Framework teilen. Um dies zu tun, speichern wir die geteilten Soucefiles in den Ordner Sources, den wir während dem Setup erstellt hatten. Diese Sourcen werden anschliessend allen drei Framework Targets zugeordnet.
Lass uns eine Beispielklasse erstellen um die km eines Autos zu tracken:
public class Car: CustomStringConvertible { var name: String var km: Int public init(name: String, km: Int) { self.name = name self.km = km } public func add(km: Int) { self.km += km } public var description: String { return "Car '\(name)' has \(km) km." } }
In unserer Anwendung wollen wir ein Auto wie folgt nutzen:
let car = Car("Toyota Camry", km: 190000) print(car) // Car 'Toyota Camry' has 190000 km car.add(km: 1000) print(car) // Car 'Toyota Camry' has 191000 km
Merke: Da die beiden Properties name und km sind non-public. Es wird nicht möglich sein auf diese von unserer Hauptapplikation zuzugreifen;
Sourcedateien hinzufügen
Im Projektnavigator klicke mit der rechten Maustaste und wähle „New Group“ und nenne es „Sources“. Nun selektiere Sources und wähle File -> New -> File… oder drücke ⌘ + N auf der Tastatur. Anschliessend wähle iOS -> Swift File.
Speichere das File als Car.swift im Ordner Sources. Achte darauf, dass die Datei der Sources Gruppe hinzugefügt wird und dass alle Framework Targets selektiert sind.
Kopiere nun den Code von oben und füge ihn in Xcode ein.
Versuche nun jedes Scheme zu erstellen (⌘ + B). Do kannst zwischen den Schemes mit den Shortcuts Ctrl + ⌘ + [ and Ctrl + ⌘ + ] hin und her navigieren.
Über Public und Private
In Swift, das Keyword public zeigt dass der Code von ausserhalb des Moduls erreichbar ist.
Public access enables entities to be used within any source file from their defining module, and also in a source file from another module that imports the defining module. You typically use public access when specifying the public interface to a framework. Access Control in Swift
Der Gebrauch von public im Source Code einer iOS, macOS oder tvOS Application bringt keinen Mehrwert, da alle der Application hinzugefügten Files innerhalb des Applikationsmoduls sind. Hingegen, damit eine Applikation auf Source Code innerhalb eines Framework zugreifen kann, ist die Verwendung von public notwendig um die Klassen, Methoden und Properties zugänglich zu machen.
Im Gegensatz zu public, das Verwenden von private macht dein Code schwieriger zu testen. Seit Xcode 7 gibt es das Feature das es erlaubt ein Framework mittels @testable import zu importieren, dadurch wird es möglich non-public Code zu testen. Allerdings nicht private Code. Da Module non-public Code nicht von ausserhalb des Moduls zugänglich machen, ist es nicht nötig private in Framework Code zu verwenden.