Hallo! Seit der Veröffentlichung von Swift 5 ist mehr als ein Jahr vergangen, was den Entwicklern viele neue Dinge gebracht hat. In diesem Artikel möchte ich über die mobile Entwicklung für IOS sprechen, wie sie funktioniert, was dafür benötigt wird und vieles mehr. Der Artikel richtet sich an Personen, die gerade mit dem Programmieren in Swift 5 beginnen .
Betriebssystem- und Hardwareanforderungen
Auf die eine oder andere Weise benötigen Sie zum Erstellen einer Anwendung für IOS einer beliebigen Version einen Computer, auf dem das Mac OS-Betriebssystem ausgeführt wird (und vorzugsweise die neueste Version, da sonst ein Teil der Entwicklertools und des Xcodes möglicherweise völlig unvorhersehbar funktioniert). Die Notwendigkeit eines Systems unter Mac OS ist die Ursache für Kontroversen und Hass anderer Entwickler, die es nicht gewohnt sind, aufgrund des Betriebssystems in ihren Funktionen eingeschränkt zu sein. Meistens gibt es mehrere Möglichkeiten: Kauf oder Montage eines Hackintosh (im Falle der Selbstmontage möchte ich Sie jedoch warnen, dass es nicht einfach sein wird, einen solchen Computer ohne ein ständiges Treiberproblem zusammenzubauen). Ich habe gesehen, dass sowohl ein Betriebssystem-Image in einer virtuellen Maschine installiert als auch Mac OS auf einem normalen Laptop ohne Treiberprobleme gerollt wurde.Für diesen Pfad sind jedoch einige Hardware-Kenntnisse erforderlich, und es besteht die Gefahr, dass zukünftige Versionen von Mac OS nicht zu 100% unterstützt werden.
Eine alternative Möglichkeit besteht natürlich darin, einen Computer zu kaufen, der ursprünglich von Apple stammt. Wenn Sie einen Laptop wollten, wissen Sie wahrscheinlich, was zu tun ist (aber ich möchte Sie sofort warnen, dass Xcode sofort etwa 25 Gigabyte benötigt und problemlos alle 44 Gigabyte beanspruchen kann, wenn Sie zusätzliche Simulatoren auf Geräte herunterladen. Die Größe von 128 Gigabyte sollte nur für die IOS-Entwicklung ohne zusätzliche Teile wie node_modules, Pycharm- und Unity-Cache, Homebrew und andere Dinge für Entwickler gelten, die eine Menge Speicherplatz beanspruchen. Wenn Sie etwas anderes tun möchten, benötigen Sie mindestens eine Festplatte ab 256 Gigabyte).
Optionen für die Entwicklungsumgebung
Neben der mehr oder weniger klassischen Art, Anwendungen in Xcode mit Swift und den Bibliotheken Cocoa und CocoaTouch zu entwickeln, gibt es jetzt viele andere Möglichkeiten, fast ohne Verwendung von Xcode zu entwickeln (nur ohne Xcode können Sie keine Anwendung mehr erstellen). Es gibt verschiedene Technologien:
- Xamarin . Anwendungen auf dieser Plattform werden mit C # geschrieben. Mit Xamarin können Sie jede native Android- oder IOS-App erstellen. Die Entwicklung kann mit Visual Studio erfolgen. Trotz dieser Vorteile höchstwahrscheinlich. Einige Anwendungsfragmente müssen für jede Plattform separat geschrieben werden
- React Native. React , -. . , - , - . , .
- Flutter. , Flutter Dart Google. , , . , Flutter — React Native, . Dart, -
- PhoneGap/Cordova. Nitobi, Adobe. , PhoneGap, Apache Cordova, WebView,
- Unity. IOS, . , . gamedev.
Apple empfiehlt die Verwendung der Programmiersprache Swift für die Entwicklung von Anwendungen. Swift ist eine relativ neue Programmiersprache, die erst 2014 offiziell veröffentlicht wurde. Es kann für die Entwicklung unter Mac OS und iOS verwendet werden, und es gibt auch Unterstützung für Linux (wenn Sie also beispielsweise kein sehr spezifisches Linux haben, können Sie die Sprache beispielsweise über diesen Link sicher herunterladen und ausprobieren ).
Swift selbst ist eine typische Sprache der neuen Generation wie Golang.
Ursprünglich war die Sprache für den Programmierer als leichter zu lesende und fehlerresistente Sprache als Ziel C konzipiert. Gleichzeitig kann Swift mit C und Ziel C innerhalb desselben Projekts arbeiten.
Anstatt zu versuchen, eine Beschreibung dieser Sprache zu geben (die auf den ersten Blick C ++ ist und nur mit einer modischen automatischen Eingabefunktion an moderne Realitäten angepasst wurde), lade ich den Leser ein, die sehr schöne Dokumentation von Apple zu studieren, die ausführlich beschreibt, wie die Sprache funktioniert und was ist seine Syntax. Die englische Version finden Sie hier , die russische Übersetzung finden Sie hier . Nachdem Sie sich mit den Grundlagen der Swift-Sprache vertraut gemacht haben, können wir mit dem fortfahren, wofür wir heute hier sind - mit Xcode unseren einfachen Taschenrechner erstellen.
Taschenrechner erstellen
Zum Erstellen einer Anwendung benötigen wir Xcode, der kostenlos im AppStore heruntergeladen werden kann. Lassen Sie sich von der Bewertung nicht einschüchtern - obwohl die ersten fünf Bewertungen 1 Stern ergeben, bedeutet dies nicht, dass Sie unter Schock stehen. Vielleicht werden die Syntax und die Hinweise beim Bearbeiten wirklich nicht zu schnell berücksichtigt - aber im Allgemeinen hat Xcode mir um ein Vielfaches günstigere Eindrücke hinterlassen als das gleiche Android Studio (obwohl ich vielleicht einfach nicht weiß, wie man es kocht). Wenn Sie plötzlich Lust haben, eine Entwicklung außerhalb von Xcode zu versuchen, und Sie JetBrains-Produkte bevorzugen, können Sie AppCode ausprobieren - es unterstützt die Interoperabilität mit Xcode, die Arbeit mit Swift und Objective C und viele andere nützliche Funktionen. Ich persönlich habe es nicht ausprobiert, aber wenn Sie ein Abonnement für die gesamte Software von JetBrains haben, können Sie es herunterladen und ausführen.
Sie haben also Xcode installiert. Jetzt können Sie mit der Entwicklung beginnen. Starten Sie ein neues Projekt und wählen Sie Einzelseitenanwendung:
Danach werden Sie aufgefordert, Daten zu Ihrer Anwendung einzugeben. Wenn Sie Xcode zum ersten Mal starten, müssen Sie dort die Apple-ID eingeben. Danach müssen Sie die Informationen über den Namen Ihres Projekts (in unserem Fall nur Rechner) und den Namen Ihres Unternehmens und Ihrer Anwendung eingeben. Sie können hier schreiben, was Sie wollen, wenn Sie diese Anwendung in Zukunft nicht veröffentlichen möchten. Ich habe Swift als Sprache und Storyboard als Benutzeroberfläche gewählt. Ich habe die Tests bisher
Nachdem wir unsere Anwendung erstellt haben, können Sie zur Datei in gehen
Calculator.xcodeprojund passen Sie die Einstellungen an, wenn Sie dies für richtig halten. Im Moment habe ich alles so gelassen, wie es ist, und für die neueste Version von IOS 13.6 für Iphone und Ipad entwickelt. Grundsätzlich können Sie das iPad vorerst ausschließen - unsere Benutzeroberfläche wird höchstwahrscheinlich nicht sehr gut aussehen. Ich möchte Sie jedoch warnen, dass Apple-Mitarbeiter bei einer plötzlichen Veröffentlichung Anwendungen für das iPhone zur Überprüfung testen, damit sie zumindest auf dem iPad funktionieren. Zuvor müssen Sie jedoch noch 99 US-Dollar für Entwicklerschlüssel ausgeben.
Nachdem Sie die Anwendung erstellt haben, können Sie sofort den Emulator aufrufen, um zu verfolgen, was passiert. Dazu können Sie einfach die Tastenkombination CMD + R drücken. Oben links können Sie die Geräte auswählen, auf denen Sie den Emulator ausführen, und Sie können Ihr reales physisches Gerät auch über ein Kabel anschließen und sofort testen.
Es gibt viele Möglichkeiten, eine Benutzeroberfläche und Widgets darin zu erstellen. Ich verwende die neutrale Option: Erstellen Sie einen Haupthalter, platzieren Sie ihn auf dem gesamten Bildschirm und beginnen Sie dann programmgesteuert mit der Positionierung meiner Widgets. Daher gehen wir zuerst zur Datei
Main.storyboardund machen die Hauptansicht schwarz, um unsere Elemente bequemer zu platzieren:
Danach fügen wir eine Ansicht hinzu, mit der wir hauptsächlich arbeiten werden. Klicken Sie dazu oben rechts auf das Pluszeichen, über das Sie Widgets hinzufügen und ein neues Widget hinzufügen können. Geben Sie uiview in die Suche ein :
Danach ziehen wir dieses Widget auf den Hauptbildschirm und müssen es auf Vollbild erweitern. Dafür müssen wir arbeiten
constaint. Klicken Sie dazu auf das Symbol unten links, das dem Schiff von Darth Vader ähnelt, und weisen Sie jeder Seite 0 zu:
Danach wird Ihr neues Widget so erweitert, dass es auf den gesamten Bildschirm passt. Als nächstes müssen wir, genau wie beim letzten Mal, die Farbe unseres Widgets ändern, nur jetzt in Farbe löschen, damit es uns nicht stört und wir Widgets darin platzieren können.
Jetzt können Sie zur Datei gehen
ViewController.swift, in dem wir den Rest der Programmierung haben werden. Zunächst müssen wir einen speziellen Marker @IBOutletverwenden, um das Storyboard mit unserem Code verknüpfen zu können. Dazu müssen wir die folgende Zeile schreiben:
@IBOutlet var holder: UIView!
Jetzt können wir den Code mit dem Widget verknüpfen. Dazu müssen Sie unseren Halter mit dem Halter verbinden. Klicken Sie dazu mit der rechten Maustaste auf
viewControllerund ziehen Sie den Halter auf unseren Bildschirm:
Schließlich haben wir die Verknüpfung des Codes mit dem Storyboard abgeschlossen und können mit der Programmierung beginnen.
Als nächstes werden wir zwei Variablen hinzufügen, von denen die erste nur eine Zahl ist, in die der erste Wert geschrieben werden kann, und die zweite der resultierende Wert ist. Die dritte Variable wird etwas spezifischer sein, da wir eine optionale Deklaration verwenden (Sie können lesen, um welche Art von Tier es sich handelt, Sie können hier mehr lesen). Optional kann ein beliebiger Wert oder Null enthalten sein. Optionals stellen außerdem sicher, dass keine Werte explizit verarbeitet werden. Zusätzlich werden wir von Anfang an eine Liste der mathematischen Operationen hinzufügen, die der Rechner unterstützt:
var firstNumber = 0
var resultNumber = 0
var currentOperations: Operation?
enum Operation {
case add, subtract, multiply, divide
}
Als nächstes müssen wir ein Label erstellen, in dem wir die Zahlen und das Ergebnis der Berechnungen anzeigen. Standardmäßig gibt es 0 und eine ziemlich große Schrift. Alles andere ist meiner Meinung nach völlig klar:
private var resultLabel: UILabel = {
let label = UILabel()
label.text = "0"
label.textColor = .white
label.textAlignment = .right
label.font = UIFont(name: "Helvetica", size: 100)
return label
}()
Nachdem wir die integrierte Methode übersprungen haben, die uns beim Rendern aufruft (ich spreche hier
viewDidLoad), müssen wir eine Methode aufrufen, die eine Funktion aufruft, die alle Schaltflächen zeichnet, an denen die Handlerfunktionen hängen bleiben.
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
setupNumberPad() //,
}
Danach haben wir die Funktion
setupNumberPad. Zuerst werde ich eine Konstante für die Größe unserer Schriftart festlegen, damit Sie später, wenn überhaupt, die Schriftgröße in der Anwendung sofort erhöhen / verringern können, da ich ohne Layout arbeite. Danach erstelle ich eine Schaltflächengröße - ihre Breite entspricht einem Viertel der Bildschirmgröße unserer Anwendung.
private func setupNumberPad() {
let FontSize:CGFloat = 25
//
let buttonSize: CGFloat = view.frame.size.width / 4
// 1/4
let zeroButton = UIButton(frame: CGRect(x: 0, y: holder.frame.size.height-buttonSize, width: buttonSize*3, height: buttonSize))
// UIButton
zeroButton.setTitleColor(.black, for: .normal)
//
zeroButton.backgroundColor = .white
//
zeroButton.setTitle("0", for: .normal)
// 0
zeroButton.titleLabel?.font = UIFont(name: "Helvetica", size: FontSize)
// , family
zeroButton.tag = 1
//
holder.addSubview(zeroButton) // holder
zeroButton.addTarget(self, action: #selector(zeroTapped), for: .touchUpInside)
//
0 nimmt ein Drittel des Bildschirms ein, damit wir in die rechte Spalte für mathematische Operanden gehen können. Als nächstes müssen wir alle Schaltflächen auf irgendeine Weise rendern. Natürlich könnte man sie einzeln zeichnen, aber dann wird es sich als lang und trostlos herausstellen. weil Wir werden nur eine Reihe von Zahlen von 1 bis 9 haben, dann ist die Entscheidung, Zyklen zu verwenden, ziemlich oberflächlich. Ich werde den ersten Zyklus mit Kommentaren geben, und seitdem Die anderen beiden sind im Wesentlichen eine Wiederholung, ich werde sie knapp unter dem Schnitt geben:
for x in 0..<3 {
let button_row_1 = UIButton(frame: CGRect(x: buttonSize * CGFloat(x), y: holder.frame.size.height-(buttonSize*2), width: buttonSize, height: buttonSize))
// x x
button_row_1.setTitleColor(.black, for: .normal) //
button_row_1.backgroundColor = .white //
button_row_1.setTitle("\(x+1)", for: .normal) //
holder.addSubview(button_row_1) //
button_row_1.tag = x+2 // .. 1 , 2
button_row_1.addTarget(self, action: #selector(numberPressed(_:)), for: .touchUpInside)
//
}
Der Rest des Codes unserer Nummern
for x in 0..<3 {
let button_row_2 = UIButton(frame: CGRect(x: buttonSize * CGFloat(x), y: holder.frame.size.height-(buttonSize*3), width: buttonSize, height: buttonSize))
button_row_2.setTitleColor(.black, for: .normal)
button_row_2.backgroundColor = .white
button_row_2.setTitle("\(x+4)", for: .normal)
button_row_2.addSubview(button_row_2)
button_row_2.tag = x+5
button_row_2.addTarget(self, action: #selector(numberPressed(_:)), for: .touchUpInside)
}
for x in 0..<3 {
let button_row_3 = UIButton(frame: CGRect(x: buttonSize * CGFloat(x), y: holder.frame.size.height-(buttonSize*4), width: buttonSize, height: buttonSize))
button_row_3.setTitleColor(.black, for: .normal)
button_row_3.backgroundColor = .white
button_row_3.setTitle("\(x+7)", for: .normal)
holder.addSubview(button_row_3)
button_row_3.tag = x+8
button_row_3.addTarget(self, action: #selector(numberPressed(_:)), for: .touchUpInside)
}
Danach müssen wir unsere CE-Taste platzieren, auf die wir die eingegebenen Daten zurücksetzen. Wir werden es oben platzieren und etwas später seine Funktionslast beschreiben. Im Moment müssen wir es nur positionieren und die Handler anschließen:
let clearButton = UIButton(frame: CGRect(x: 0, y: holder.frame.size.height-(buttonSize*5), width: view.frame.size.width - buttonSize, height: buttonSize))
clearButton.setTitleColor(.black, for: .normal)
clearButton.backgroundColor = .init(red: 0, green: 2, blue: 0.8, alpha: 1) // rgb
clearButton.titleLabel?.font = UIFont(name: "Helvetica", size: FontSize-4) //
clearButton.setTitle("CE", for: .normal)
holder.addSubview(clearButton) // holder
clearButton.addTarget(self, action: #selector(clearResult), for: .touchUpInside) //
Wir sind mit diesem langweiligen, sich wiederholenden Teil fertig, jetzt sind wir bereit für eine andere Sache - unsere Operanden, mit denen wir mathematische Operationen ausführen können. Zunächst platzieren wir die erforderlichen Operanden innerhalb des Arrays, von wo aus wir sie übernehmen. Wir werden die Operandenschaltflächen selbst in einer Spalte platzieren und eine Handlerfunktion hinzufügen, die auf das Drücken unserer Operanden reagiert. Ich werde die Knöpfe in einer angenehmen
let operations = ["=","+", "-", "x", "÷"] //
for x in 0..<5 {
let button_operand = UIButton(frame: CGRect(x: buttonSize * 3, y: holder.frame.size.height-(buttonSize * CGFloat(x+1)), width: buttonSize, height: buttonSize))
button_operand.setTitleColor(.black, for: .normal)
button_operand.backgroundColor = .init(red: 2, green: 0.8, blue: 0, alpha: 1) //
button_operand.setTitle(operations[x], for: .normal)
holder.addSubview(button_operand)
button_operand.tag = x+1
// ,
button_operand.titleLabel?.font = UIFont(name: "Helvetica", size: FontSize)
button_operand.addTarget(self, action: #selector(operationPressed(_:)), for: .touchUpInside)
}
Nach diesen globalen Operationen müssen wir nur noch das Label positionieren, in das wir das Ergebnis schreiben, und die Funktion schließen:
resultLabel.frame = CGRect(x: 20, y: clearButton.frame.origin.y - 110.0, width: view.frame.size.width - 40, height: 100)
holder.addSubview(resultLabel)
} //
Jetzt können Sie zu den Handlern übergehen:
Arbeiten mit Handlern
All dies war im Wesentlichen nur ein Layout, jetzt müssen wir der Anwendung Logik einhauchen. Zu diesem Zweck verwenden wir Methoden aus der Objective C-Laufzeit, um unseren Code zu vereinfachen. Wenn Sie nicht verstehen, was passiert, kann ich Ihnen diesen Artikel zum Lesen empfehlen .
Also, hier sind unsere Funktionen:
@objc func clearResult() {
resultLabel.text = "0" // 0
currentOperations = nil //
firstNumber = 0 // 0
}
@objc func zeroTapped() {
//
if resultLabel.text != "0" {
if let text = resultLabel.text {
resultLabel.text = "\(text)\(0)" //
}
}
}
Als nächstes müssen wir unseren Schaltflächen eine Handlerfunktion hinzufügen:
@objc func numberPressed(_ sender: UIButton) {
let tag = sender.tag - 1
if resultLabel.text == "0" {
resultLabel.text = "\(tag)"
}
else if let text = resultLabel.text {
//
resultLabel.text = "\(text)\(tag)"
}
}
Als nächstes kommt die wichtigste Geschäftslogik unserer Anwendung. Wir werden das Schalterkonstrukt verwenden, um unsere mathematischen Operationen zu steuern:
@objc func operationPressed(_ sender: UIButton) {
let tag = sender.tag
if let text = resultLabel.text, let value = Int(text), firstNumber == 0 {
//
firstNumber = value
resultLabel.text = "0"
}
if tag == 1 {
if let operation = currentOperations {
var secondNumber = 0
if let text = resultLabel.text, let value = Int(text) {
secondNumber = value
}
switch operation {
case .add:
firstNumber = firstNumber + secondNumber
secondNumber = 0 //
resultLabel.text = "\(firstNumber)"
currentOperations = nil
firstNumber = 0 // Label
break
case .subtract:
firstNumber = firstNumber - secondNumber
secondNumber = 0
resultLabel.text = "\(firstNumber)"
currentOperations = nil
firstNumber = 0
break
case .multiply:
firstNumber = firstNumber * secondNumber
secondNumber = 0
resultLabel.text = "\(firstNumber)"
currentOperations = nil
firstNumber = 0
break
case .divide:
firstNumber = firstNumber / secondNumber
secondNumber = 0
resultLabel.text = "\(firstNumber)"
currentOperations = nil
firstNumber = 0
break
}
}
}
else if tag == 2 {
currentOperations = .add
// . ,
}
else if tag == 3 {
currentOperations = .subtract
}
else if tag == 4 {
currentOperations = .multiply
}
else if tag == 5 {
currentOperations = .divide
}
}
}
Das ist alles! Den Quellcode für diese Anwendung finden Sie unter diesem Link. Infolgedessen sah das Erscheinungsbild folgendermaßen aus:
Traditionell werde ich einige nützliche Ressourcen bereitstellen, die für einen IOS-Anfänger-Entwickler nützlich sein können:
- Tolle Anfängerseite mit unzähligen Antworten auf häufig gestellte Swift-Fragen.
- Swift Tour, cooler Ort, wenn Sie bereits mit Programmieren vertraut sind und einfach nur mit der Sprache vertraut werden möchten
- Ein wenig über das relativ neue und trendige SwiftUI
Ein schneller Einstieg in die iOS-Entwicklung. Kostenloses Webinar