Apple Swift-programmeertaal. Een kort overzicht van de Swift-taal

Swift is een ongelooflijk krachtige en eenvoudige programmeertaal die in 2014 door Apple werd geïntroduceerd en die voor veel programmeurs de deur opent om apps te maken voor iOS, macOS, Apple TV en Apple Watch. Deze taal ideeën geërfd van Objective-C, Rust, Haskell, Ruby, Python, C# en CLU. Het maakt gebruik van veilige programmeerpatronen en bevat nieuwe functies om programmeren leuk en interessant te maken. Gemaakt door Chris Lattner, het is betrouwbaar, snel en open taal, waardoor het nog eenvoudiger wordt om apps te maken voor 's werelds populairste telefoon.

Swift is een moderne programmeertaal met een stabiele releaseversie die vrij eenvoudig te leren is, zelfs als je bedenkt dat het je eerste taal is. Het voorkomt veel fouten in de compilatiefase, versnelt het ontwikkelingsproces en verbetert de codekwaliteit.

Snelle filosofie

De belangrijkste filosofie van de taal is de eenvoud, snelheid en veiligheid. De instapdrempel is aanzienlijk veranderd in vergelijking met Objective C - zelfs zonder enige andere programmeertalen of basiskennis te kennen, kun je veilig beginnen met het leren van de taal.

Apple heeft de taal voor ontwikkelaars zoveel mogelijk vereenvoudigd: de syntaxis is schoner geworden, wat de leesbaarheid van de code voor zowel ervaren als beginnende programmeurs vergroot. De totale hoeveelheid code is afgenomen, wat resulteert in een hogere productiviteit. Alle methoden die in Objective C werden gebruikt, zijn volledig opnieuw ontworpen, heroverwogen en herschreven. Swift wordt voortdurend ontwikkeld en bijgewerkt, wat de betrouwbaarheid en focus op de toekomst aangeeft.

Waar wordt Swift gebruikt?

Ontwikkelaars gebruiken deze programmeertaal om mobiele applicaties te schrijven voor Apple-telefoons, smartwatches en computers. Er ging zelfs een gerucht dat Google Android volledig naar Swift wil overbrengen, er kan van alles gebeuren. Dit is een universele taal die op elk platform van het bedrijf Cupertino kan worden gebruikt.

Belangrijk is dat Apple in het najaar van 2016 de opening heeft gefaciliteerd van een leercentrum voor studenten waar iedereen kan leren iOS-apps te programmeren. Maar dat is nog niet alles: Swift is al opgenomen in de Verenigde Staten leerplan veel vooraanstaande onderwijsinstellingen. Deze programmeertaal heeft een enorm potentieel.

Snelle leerproblemen

Swift is een veilige taal die u tegen de meeste fouten in het programmeerproces zal beschermen. Het zal u vertellen waar de fout zit en waarom het programma niet compileert. Maar aan de andere kant wordt hier strikt getypeerd. Het taalgebruik van Apple is meedogenloos.

Op dit moment Er is weinig documentatie beschikbaar vergeleken met andere talen. Maar dit kan worden verklaard door het feit dat de taal onlangs is uitgebracht en een Open Source-project is geworden, omdat deze op het moment van uitgave alleen kon worden gebruikt door ontwikkelaars die een actief Apple Developer Program-abonnement hadden.

Nog eerder zou je kunnen zeggen dat Swift niet erg populair is en dat er maar een klein aantal is bibliotheken van derden en uitbreidingen, maar nu is dit helemaal niet het geval. Er zijn tientallen uitstekende oplossingen van externe ontwikkelaars op GitHub en internet die u zullen helpen uw project te verbeteren.

Voor- en nadelen van Swift

Deze moderne en krachtige programmeertaal heeft een aantal voordelen die hem onderscheiden van andere of dezelfde Objective-C. En dit zijn nieuwe krachtige taalmogelijkheden, extreem strikte gegevenstypering, beknoptere syntaxis, aanzienlijk betere prestaties bij toegang tot collecties (sorteren en zoeken), ondersteuning voor een zekere meerderheid van moderne syntactische constructies die in andere talen bestaan. talen op hoog niveau programmering. En een van de belangrijkste kenmerken van Swift is dat het volledig achterwaarts compatibel is met Objective-C. Hierdoor kun je projecten geleidelijk van de ene taal naar de andere herschrijven, en wordt het ook mogelijk om Objective-C-functionaliteit binnen Swift zelf te gebruiken.

Een van de aangename momenten is Playground - dit is een soort interactieve sandbox waar een ontwikkelaar code kan schrijven en onmiddellijk het resultaat van zijn werk kan zien. Hiermee kunt u de snelheid van het schrijven van basistekst meerdere keren verhogen, omdat schrijven aparte stukken code of algoritmen kunnen nu met visuele feedback in de speeltuin worden uitgevoerd, zonder risico op fouten in het hoofdproject.

Apple heeft veel dingen herwerkt, waardoor we een vrijwel nieuw, geavanceerd opsommingssysteem, efficiënt toegangsbeheer en geoptimaliseerde automatische afvalinzameling hebben gekregen.

De donkere kant van de taal is de lage populariteit en lage prevalentie ervan. De meeste huidige projecten zijn geschreven in Objective-C en zullen moeten worden onderhouden, en veel bedrijven herschrijven hun grote projecten niet simpelweg omdat het een enorm en ongelooflijk tijdrovend proces is.

Gerelateerde technologieën

Apple heeft de overstap gemaakt van het gebruik van statische bibliotheken naar dynamische bibliotheken en heeft deze functionaliteit aan zijn programmeertaal toegevoegd, wat betekent dat deze sneller evolueert dan iOS zelf. Nu kunnen ontwikkelaars hun applicatie eenvoudig presenteren, samen met de bibliotheken die ze hebben geschreven. Voorheen moest je wachten op een nieuwe iOS-release, maar nu is de situatie veranderd. Dynamische bibliotheken bieden de mogelijkheid om verbeteringen en wijzigingen in uw code flexibeler dan ooit tevoren aan te brengen.

Swift is een meer functionele en toegankelijke taal die, net als Objective-C, de officiële Cocoa- en Cocoa Touch-frameworks ondersteunt. Er zijn veel open source-projecten online beschikbaar, waaronder van: grote bedrijven zoals Airbnb, waarmee je van alles gebruik kunt maken moderne methoden en beslissingen bij het schrijven van code.

miden16 10 juni 2014 om 13:06 uur

Snelle programmeertaal. Russische versie

  • Ontwikkeling voor iOS,
  • Snel

Hallo, Habr! Op 2 juni konden we allemaal met eigen ogen zien hoe Apple een revolutie begon te veroorzaken in het kamp van Objective-C-ontwikkelaars door zijn nieuwe programmeertaal Swift aan de wereld te presenteren. Tegelijkertijd stelde ze een kleine documentatie over de taal beschikbaar voor het publiek, die we besloten te vertalen als er vraag naar was. Wij presenteren onder uw aandacht een vertaling van het eerste hoofdstuk. Als het onderwerp interessant is, zullen we de vertaling elke week blijven publiceren.

Taalgids
De basis
Basisoperatoren
Tekenreeksen en karakters
Verzamelingstypen
Controlestroom
Functies
Sluitingen
Opsommingen
Klassen en structuren
Eigenschappen
Methoden
Abonnementen
Erfenis
Initialisatie
Deïnitialisatie
Automatische referentietelling
Optioneel ketenen
Type Casting
Geneste typen
Extensies
Protocollen
Merkloos product
Geavanceerde operators

Taalreferentie
Over de taalreferentie
Lexicale structuur
Soorten
Uitdrukkingen
Verklaringen
Verklaringen
Kenmerken
Patronen
Generieke parameters en argumenten
Samenvatting van de grammatica
Handelsmerken

Welkom bij Swift

Over de Swift-taal
Swift is een nieuwe programmeertaal voor iOS-ontwikkeling en OS X-apps, die het beste van C en Objective-C combineren zonder de beperkingen van C-compatibiliteit. Swift maakt gebruik van veilige programmeerpatronen en voegt moderne functies toe die het bouwen van een app eenvoudiger, flexibeler en leuker maken. Swift is helemaal opnieuw door ons gebouwd en biedt een kans om opnieuw te bedenken hoe apps worden ontwikkeld.

Swift is al enkele jaren in ontwikkeling. De basis van de nieuwe programmeertaal waren de bestaande compiler, debugger en frameworks. We hebben het geheugenbeheer vereenvoudigd met Automatic Reference Counting (ARC). Ook onze raamwerken hebben een grote modernisering ondergaan. Objective-C begon blokken, letterlijke waarden en modules te ondersteunen - dit alles creëerde gunstige omstandigheden voor de introductie van moderne technologieën. Het was dit voorbereidende werk dat als basis diende voor een nieuwe programmeertaal die zal worden gebruikt om toekomstige softwareproducten voor Apple te ontwikkelen.

Objective-C-ontwikkelaars zullen Swift bekend voorkomen. Het combineert de leesbaarheid van genoemde parameters met de kracht van dynamiek objectmodel Doelstelling C. Het opent bestaande Cocoa-frameworks en is compatibel met code geschreven in Objective-C. Gebouwd op deze gemeenschappelijke basis, biedt de taal veel nieuwe functies en verenigt het de procedurele en objectgeoriënteerde aspecten van de programmeertaal.

Ook Swift zal beginnende programmeurs niet afschrikken. Het is de eerste krachtige programmeertaal die net zo intuïtief en leuk is als een scripttaal. Het ondersteunt zogenaamde speeltuinen, waarmee programmeurs met code kunnen experimenteren en het resultaat in realtime kunnen zien zonder de applicatie te hoeven compileren en uitvoeren.

Swift heeft het beste uit zichzelf geabsorbeerd moderne talen en is ontwikkeld op basis van de uitgebreide ervaring van Apple. Onze compiler staat synoniem voor prestaties en onze taal is geoptimaliseerd voor ontwikkeling zonder rekening te houden met compromissen. Het is zo ontworpen dat u eenvoudig uw eerste “hallo, wereld!”-applicatie kunt ontwikkelen, en zelfs een hele besturingssysteem. Dit alles maakt Swift tot een belangrijk hulpmiddel voor ontwikkelaars en voor Apple zelf.

Swift is een fantastische nieuwe manier om apps te bouwen voor iOS en OS X, en we zullen hierop blijven voortbouwen door nieuwe functionaliteit toe te voegen en nieuwe functies te introduceren. Ons doel is ambitieus. En we kunnen niet wachten om te zien wat je ermee kunt creëren.

Introductie tot Swift
Volgens een lange traditie zou het eerste programma in een nieuwe taal de woorden “Hallo wereld” op het scherm moeten weergeven. Met Swift gaat het als volgt:

Println("Hallo wereld")
Als je ooit in C of Objective-C hebt ontwikkeld, zou deze syntaxis je griezelig bekend moeten voorkomen - in Swift is deze coderegel een compleet programma. U hoeft niet langer afzonderlijke bibliotheken te importeren om basisfunctionaliteit zoals console-I/O of stringmanipulatie te bieden. Code geschreven in de globale scope is het toegangspunt tot het programma, dus de hoofdfunctie is niet langer nodig. Merk ook op dat er geen puntkomma aan het einde van elke regel staat.

Deze introductie biedt voldoende informatie om aan de slag te gaan met coderen in Swift. Maak je geen zorgen als je iets niet begrijpt - we zullen alles in de volgende hoofdstukken gedetailleerd uitleggen.

Opmerking
Voor een beter begrip van de stof raden we aan de speeltuinmodus in Xcode te gebruiken. Met Playground kunt u de resultaten onmiddellijk zien terwijl u uw code bewerkt, zonder dat u de applicatie hoeft te compileren en uit te voeren.
Eenvoudige gegevenstypen
Gebruik let om een ​​constante te creëren en var om een ​​variabele te creëren. Het type constante hoeft niet te worden gespecificeerd; u kunt er slechts één keer een waarde aan toekennen.

Var mijnVariabele = 42 mijnVariabele = 50 let mijnConstante = 42
De typen van een constante en een variabele moeten overeenkomen met de typen van de overeenkomstige waarden die eraan zijn toegewezen. Dit betekent echter niet dat u het type rechtstreeks moet opgeven. De compiler bepaalt automatisch het type constante en variabele wanneer er een waarde aan wordt toegewezen. In het bovenstaande voorbeeld zal de compiler dus bepalen dat myVariable een geheel getal is.

Als de initializer ontbreekt of niet voldoende informatie geeft, kunt u zelf het type opgeven na de variabele, waarbij u de naam en het type scheidt met een dubbele punt:

Laat implicietGeheel getal = 70 laat inplicitDouble = 70.0 laat inplicitDouble: Double = 70

Laten we experimenteren
Creëer een constante met het type Float en initialiseer deze met het getal 4.

Waarden worden nooit impliciet omgezet naar een ander type. Als u een waarde naar een ander type moet converteren, doe dit dan expliciet:
let label = "De breedte is " let width = 94 let widthLabel = label + String(breedte)
Laten we experimenteren
Probeer de expliciete conversie naar String in de laatste regel te verwijderen. Welke foutmelding krijgt u?

Een eenvoudigere manier om waarden in tekenreeksen op te nemen, is door de expressie tussen haakjes te plaatsen en deze vooraf te laten gaan door een backslash (\). Voorbeeld:

Laat appels = 3 laat sinaasappels = 5 laat appelSummary = "Ik heb \(appels) appels." let fruitSummary = "Ik heb \(appels + sinaasappels) stukjes fruit."

Laten we experimenteren
Probeer de \()-constructie te gebruiken en print een string met daarin het resultaat van de som van twee integer-variabelen en iemands naam.

Bij het werken met arrays en associatieve arrays (woordenboeken) worden vierkante haakjes () gebruikt:

Var shoppingList = ["meerval", "water", "tulpen", "blauwe verf"] shoppingList = "fles water" var professions = [ "Malcolm": "Kapitein", "Kaylee": "Mechanic", ] beroepen ["Jayne"] = "Public Relations"
Gebruik de volgende syntaxis om een ​​lege array of woordenboek te maken:

Laat emptyArray = String() laat emptyDictionary = Woordenboek ()
Als u lege arrays en woordenboeken wilt maken, gebruikt u respectievelijk [:], bijvoorbeeld wanneer u een nieuwe waarde aan een variabele toewijst of een argument aan een functie doorgeeft.

ShoppingList = // Ging winkelen en alles gekocht.

Condities en cycli
If- en switch-instructies worden gebruikt om voorwaarden te creëren, en for-in-, for-, while- en do-while-instructies worden gebruikt om lussen te creëren. In dit geval is het niet nodig om voorwaarden te markeren en uitdrukkingen tussen haakjes te initialiseren, terwijl accolades wel nodig zijn.

Laat individualScores = var teamScore = 0 voor score in individualScores (indien score > 50 ( teamScore += 3 ) anders ( teamScore += 1 ) ) teamScore
De voorwaarde binnen de if-instructie moet een booleaanse waarde zijn, wat specifiek betekent dat de if score (...)-instructie een fout is omdat er geen expliciete vergelijking is (bijvoorbeeld met nul).

De if-instructie kan worden gebruikt in combinatie met let en var om te werken met constanten en variabelen die een nulwaarde kunnen hebben. Dergelijke constanten en variabelen worden optioneel genoemd (dat wil zeggen, ze kunnen elke waarde aannemen of gelijk zijn aan nul). Als u een optionele variabele of constante wilt maken, voegt u een vraagteken (?) toe na het type.

Var optioneelString: String? = "Hallo" optioneleString == nul var optioneleNaam: String? = "John Appleseed" var groet = "Hallo!" if let naam = optioneelNaam ( begroeting = "Hallo, \(naam)" )

Laten we experimenteren
Wijzig optioneleName in nil . Wat zie je op het scherm? Voeg een else-blok toe om het geval af te handelen waarin optioneleName nul is.

Als de optionele waarde nil is, is de voorwaarde false en wordt de code tussen de accolades na if niet uitgevoerd. Anders krijgt de begroetingsvariabele een nieuwe waarde toegewezen.

De meerkeuze-operatorschakelaar ondersteunt vele andere vergelijkingsoperatoren op zichzelf en is niet beperkt tot eenvoudige vergelijkingen:

Let groente = "rode peper" van groente wisselen ( case "selderie": let groenteComment = "Voeg wat rozijnen toe en maak mieren op een stuk hout." case "komkommer", "waterkers": let groenteComment = "Dat zou een goede theesandwich zijn ." case let x waarbij x.hasSuffix("peper"): let plantaardigeComment = "Is het pittig \(x)?" default: let plantaardigeComment = "Alles smaakt lekker in soep." )

Laten we experimenteren
Probeer de standaardvoorwaarde te verwijderen. Welke foutmelding krijgt u?

Nadat het juiste codeblok is uitgevoerd, verlaat het programma de switch-instructie zonder de daaropvolgende voorwaarden te controleren. Op deze manier hoeft u niet handmatig break-instructies toe te voegen aan het einde van elk caseblok.

Om elementen te herhalen associatieve array gebruik de for-in-instructie in combinatie met het opgeven van een paar namen voor elk sleutel-waardepaar.

Laat interessanteNumbers = [ "Prime": , "Fibonacci": , "Square": , ] var grootste = 0 voor (soort, getallen) in interessanteNumbers ( voor getal in getallen ( als getal > grootste (grootste = getal ) ) ) grootste

Laten we experimenteren
Voeg nog een variabele toe waarmee u kunt achterhalen welke van de drie typen het maximaal gevonden aantal is.

Met de while-lusinstructie kunt u een blok code daarin uitvoeren totdat de voorwaarde als onwaar wordt beoordeeld. De voorwaarde kan ook achter het blok worden opgegeven, dat in dit geval minimaal één keer wordt uitgevoerd.

Var n = 2 terwijl n< 100 { n = n * 2 } n var m = 2 do { m = m * 2 } while m < 100 m
De for-instructie kan worden gebruikt om een ​​reeks getallen te herhalen met behulp van twee punten (..) of met behulp van een initialisator, voorwaarde en verhoging. Kijk, deze twee lussen doen hetzelfde:

Var firstForLoop = 0 voor i in 0..3 ( firstForLoop += i ) firstForLoop var secondForLoop = 0 voor var i = 0; i< 3; ++i { secondForLoop += 1 } secondForLoop
Wanneer u een lus maakt, gebruikt u twee punten (..) als u de grotere waarde niet in het bereik wilt opnemen, en drie punten (...) om zowel de kleinere als de grotere waarden op te nemen.

Functies en sluitingen.
Gebruik het trefwoord func om functies te declareren. Een functie wordt aangeroepen door de naam en een lijst met argumenten tussen haakjes op te geven. Het retourtype moet worden gescheiden van de formele argumentenlijst met behulp van -> .

Func greet(naam: String, dag: String) -> String ( return "Hallo \(naam), vandaag is het \(dag)." ) greet("Bob", "dinsdag")

Laten we experimenteren
Verwijder de dagparameter. Voeg in plaats daarvan een variabele toe die de naam aangeeft van het gerecht dat als lunch wordt geserveerd.

Als een functie meerdere waarden retourneert, moet u een tupel gebruiken:

Func getGasPrices() -> (Dubbel, Dubbel, Dubbel) ( return (3.59, 3.69, 3.79) ) getGasPrices()
Functies kunnen ook een onbepaald aantal argumenten hebben:

Func somOf(getallen: Int...) -> Int ( var som = 0 voor getal in getallen ( som += getal ) retour som ) somOf() somOf(42, 597, 12)

Laten we experimenteren
Schrijf een functie waarmee je het rekenkundig gemiddelde van een willekeurig aantal argumenten kunt vinden.

Functies kunnen in elkaar worden genest. Een geneste functie heeft toegang tot variabelen die zijn gedeclareerd in externe functie. Gebruik geneste functies om de code van een complexe of grote functie op te ruimen.

Func returnVijftien() -> Int ( var y = 10 func add() ( y += 5 ) add() return y ) returnVijftien()
Functies zijn objecten van de eerste klasse (eersteklastype), met andere woorden: een functie kan een andere functie als resultaat retourneren.

Func makeIncrementer() -> (Int -> Int) ( func addOne(getal: Int) -> Int ( return 1 + number ) return addOne ) var increment = makeIncrementer() increment(7)
Een functie kan ook een andere functie als argument hebben.

Func hasAnyMatches(lijst: Int, voorwaarde: Int -> Bool) -> Bool ( voor item in lijst ( if condition(item) ( return true ) ) return false ) func lessThanTen(number: Int) -> Bool (return number< 10 } var numbers = hasAnyMatches(numbers, lessThanTen)
Functies zijn een speciaal geval van sluitingen. U kunt een sluiting maken zonder een naam op te geven en door de hoofdtekst van de sluiting te omringen met accolades (()). Gebruik de operator in om de argumenten en het retourtype te scheiden van de hoofdtekst van de afsluiting.

Numbers.map(( (getal: Int) -> Int in laat resultaat = 3 * getal retourneert resultaat ))

Laten we experimenteren
Herschrijf de afsluiting zodat deze nul retourneert voor alle extra getallen.

Er zijn verschillende technieken om afsluitingen beknopter te maken. Als het type afsluiting a priori bekend is (het is bijvoorbeeld een callback van een delegatie), kunt u weglaten het type van de parameters en/of het type van de retourwaarde op te geven. Afsluitingen die uit één enkele expressie bestaan, retourneren impliciet het resultaat van die expressie.

Numbers.map(( getal in 3 * getal ))
In een afsluiting kunt u deze gebruiken in plaats van een variabelenaam op te geven serienummer– dit is vooral handig bij het schrijven van kortsluitingen. De afsluiting, het laatste argument van de functie, kan er onmiddellijk na de haakjes aan worden doorgegeven met de lijst met resterende parameters.

Sorteren() ($0 > $1 )

Objecten en klassen
Om een ​​klasse te maken, gebruikt u het gereserveerde woord klasse. Klasseleden worden op dezelfde manier gedeclareerd als reguliere constanten en variabelen. Bovendien worden klassemethoden gedeclareerd als gewone functies.

Klassevorm ( var numberOfSides = 0 func simpleDescription() ->

Laten we experimenteren
Voeg een klasselidconstante toe en een klassemethode die deze als argument gebruikt.

Om een ​​instantie (object) van een klasse te maken, voegt u gewoon haakjes toe achter de klassenaam. Methoden en klasleden zijn toegankelijk via een punt.

Var vorm = Vorm() shape.numberOfSides = 7 var shapeDescription = vorm.simpleDescription()
In dit voorbeeld hebben we één belangrijk detail gemist: de klassenconstructor, de init-methode.

Class NamedShape ( var numberOfSides: Int = 0 var name: String init(name: String) ( self.name = name ) func simpleDescription() -> String ( return "Een vorm met \(numberOfSides) zijden." ) )
Merk op hoe het naamklasselid door zichzelf wordt gescheiden van het naamconstructorargument. Argumenten worden op de normale manier doorgegeven aan de constructor, net als bij elke andere klassenmethode. Merk op dat elk klasselid moet worden geïnitialiseerd, hetzij wanneer het wordt gedeclareerd (zoals numberOfSides) of in de constructor (zoals naam).

De klassendestructor is de deinit-methode, die indien nodig kan worden overschreven.

Om een ​​klasse van een bestaande klasse te erven, voegt u, na het specificeren van de naam van de onderliggende klasse, een dubbele punt toe en geeft u de naam van de bovenliggende klasse aan. In Swift zijn er geen beperkingen op verplichte overerving van welke standaardklasse dan ook.

Methoden die door een onderliggende klasse worden overschreven, moeten worden gemarkeerd met het sleutelwoord overschrijven. Het overschrijven van methoden zonder overschrijven zal resulteren in een fout. De compiler detecteert ook methoden die als overschrijven zijn gemarkeerd, maar die geen enkele methode van hun bovenliggende klasse overschrijven.
class Square: NamedShape ( var sideLength: Double init(sideLength: Double, name: String) ( self.sideLength = sideLength super.init(name: name) numberOfSides = 4 ) func area() -> Double ( return sideLength * sideLength ) override func simpleDescription() -> String ( return "Een vierkant met zijden met lengte \(sideLength)." ) ) let test = Square(sideLength: 5.2, naam: "mijn testvierkant") test.area() test.simpleDescription ()

Laten we experimenteren
Maak een Circle-klasse en neem over van de NamedShape-klasse. De constructor voor de klasse Circle heeft twee argumenten nodig: radius en naam. Overschrijf het gebied en beschrijf de methoden van deze klasse.

Klasleden kunnen ook hun eigen getter en setter hebben.

Klasse EquilateralTriangle: NamedShape ( var sideLength: Double = 0.0 init(sideLength: Double, name: String) ( self.sideLength = sideLength super.init(naam: naam) numberOfSides = 3 ) var perimeter: Double ( get ( return 3.0 * sideLength ) set ( sideLength = newValue / 3.0 ) ) override func simpleDescription() -> String ( return "Een gelijkzijdige driehoek met zijden van lengte \(sideLength)." ) ) var Triangle = EquilateralTriangle(sideLength: 3.1, naam: "een driehoek ") driehoek.perimeter driehoek.perimeter = 9,9 driehoek.sideLengte
In de setter van de perimetervariabele wordt de nieuwe toegewezen waarde impliciet newValue genoemd. U kunt de naam van deze variabele wijzigen door deze direct na set tussen haakjes te zetten.

Let op de constructorstructuur van de klasse EquilateralTriangle. Deze methode omvat drie opeenvolgende stappen:

  1. het initialiseren van leden van een onderliggende klasse;
  2. het aanroepen van de constructor van de bovenliggende klasse;
  3. het wijzigen van de waarden van leden van de bovenliggende klasse.
Als u specifieke code moet uitvoeren voor of na het toewijzen van een nieuwe waarde aan een variabele, kunt u de methoden willSet en didSet overschrijven om aan uw behoeften te voldoen. De onderstaande klasse garandeert bijvoorbeeld dat de zijdelengte van een driehoek altijd gelijk is aan de zijdelengte van een vierkant.

Klasse TriangleAndSquare ( var driehoek: EquilateralTriangle ( willSet ( square.sideLength = newValue.sideLength ) ) var square: Square ( willSet ( driehoek.sideLength = newValue.sideLength ) ) init(grootte: Double, naam: String) ( square = Square( sideLength: grootte, naam: naam) driehoek = EquilateralTriangle(sideLength: grootte, naam: naam) ) var driehoekAndSquare = TriangleAndSquare(grootte: 10, naam: "een andere testvorm") driehoekAndSquare.square.sideLength driehoekAndSquare.triangle.sideLength driehoekAndSquare . vierkant = Vierkant(sideLength: 50, naam: "groter vierkant") driehoekAndSquare.triangle.sideLength
Klassemethoden hebben één belangrijk verschil met functies. De namen van de argumenten van een functie worden alleen binnen die functie gebruikt, terwijl in een klassenmethode de parameters ook worden gebruikt bij het aanroepen van die methode (behalve de eerste parameter). Standaard heeft een klassemethode dezelfde parameternamen, zowel wanneer deze wordt aangeroepen als binnen zichzelf. U kunt echter een andere naam opgeven (in het onderstaande voorbeeld - tijden), die alleen binnen deze methode wordt gebruikt. In dit geval moet u, om deze methode aan te roepen, de voornaam (numberOfTimes) gebruiken.

Klasse Teller ( var count: Int = 0 func incrementBy(bedrag: Int, numberOfTimes times: Int) ( count += bedrag * times ) var counter = Counter() counter.incrementBy(2, numberOfTimes: 7)
Wanneer u met optionele waarden werkt, voegt u een vraagteken (?) toe vóór methoden, klassenleden, enz. Als de waarde vóór het vraagteken nil is, wordt alles na de (?) genegeerd en is de gehele expressie nil . Anders wordt de expressie zoals gewoonlijk geëvalueerd. In beide gevallen resulteert de gehele expressie in een optionele waarde.

Laat optioneel Vierkant: Vierkant? = Vierkant(sideLength: 2,5, naam: "optioneel vierkant") let sideLength = optioneleSquare?.sideLength

Opsommingen en structuren
Het sleutelwoord enum wordt gebruikt om opsommingen te maken. Merk op dat opsommingen ook methoden kunnen bevatten.

Enum Rang: Int ( case Ace = 1 case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten case Jack, Queen, King func simpleDescription() -> String ( switch self ( case .Ace: return " aas" case .Jack: return "jack" case .Queen: return "queen" case .King: return "king" standaard: return String(self.toRaw()) ) ) ) let ace = Rank.Ace let aceRawValue = aas .toRaw()

Laten we experimenteren
Schrijf een functie die 2 rangopsommingen vergelijkt op basis van hun waarden.

In het bovenstaande voorbeeld zijn de enum-elementen aanvankelijk van het type geheel getal en hoeft u alleen de waarde van het eerste element op te geven. De waarden van de overige elementen worden bepaald op basis van de volgorde waarin ze verschijnen. Als originele soort(onbewerkte waarde) van elementwaarden, u kunt ook string- of reële typen kiezen.

Om het oorspronkelijke waardetype naar een opsommingstype te converteren, gebruikt u de functies toRaw en fromRaw.

Als geconverteerdeRank = Rank.fromRaw(3) ( laat threeDescription = geconverteerdeRank.simpleDescription() )
Merk op dat de waarden van de opsommingselementen actueel zijn, en niet simpelweg een andere weergave van hun oorspronkelijke waarden. Over het algemeen hoeft u de oorspronkelijke waarden niet op te geven.

Enum Suit ( case Spades, Hearts, Diamonds, Clubs func simpleDescription() -> String ( switch self ( case .Spades: retourneer "schoppen" case .Hearts: retourneer "harten" case .Diamonds: retourneer "diamanten" case .Clubs: return "clubs" ) ) ) laat harten = Suit.Hearts laat hartenDescription = harten.simpleDescription()

Laten we experimenteren
Voeg een kleurmethode toe die de string ‘zwart’ retourneert voor schoppen en klaveren en ‘rood’ voor harten en ruiten.

Merk op hoe toegang wordt verkregen tot het Hearts-lid van de Suit-opsomming. Bij het toekennen van een waarde aan de hartenconstante wordt de volledige naam Suit.Hearts gebruikt omdat we het type van de constante niet expliciet specificeren. En in de andere richting gebruiken we de korte vorm .Harten omdat het type eigenwaarde a priori bekend is. U kunt de korte vorm overal gebruiken, zolang het type van de variabele expliciet wordt gespecificeerd.

Het sleutelwoord struct wordt gebruikt om structuren te maken. Structuren hebben veel overeenkomsten met klassen, inclusief methoden en constructors. Een van de belangrijkste verschillen tussen structuren en klassen is dat instanties van structuren, in tegenstelling tot instanties van klassen, op basis van waarde aan functies worden doorgegeven (dat wil zeggen dat hun lokale kopie eerst wordt gemaakt), terwijl instanties van klassen door verwijzing worden doorgegeven.

Structure Card ( var rang: Rang var suit: Suit func simpleDescription() -> String ( return "De \(rank.simpleDescription()) van \(suit.simpleDescription())" ) ) let threeOfSpades = Card(rang: . Drie, kleur: .Spades) let threeOfSpadesDescription = threeOfSpades.simpleDescription()

Laten we experimenteren
Voeg een methode toe aan de kaartstructuur die een volledig kaartspel creëert.

Een exemplaar van een opsommingslid kan een eigenwaarden en ze kunnen verschillend zijn. Deze waarden wijst u toe wanneer u de enum (de succesconstante in het voorbeeld) instantieert. Gebonden en originele waarden zijn verschillende dingen: originele waarde Een opsommingslid is altijd constant in alle exemplaren van de opsomming en wordt gespecificeerd wanneer deze wordt gedeclareerd.

Laten we een voorbeeld bekijken van het ontvangen van zonsopgang- en zonsondergangtijden van een server. De server reageert met relevante informatie of een foutmelding.

Enum ServerResponse ( case Result(String, String) case Error(String) ) let success = ServerResponse.Result("6:00 am", "20:09 pm") let fail = ServerResponse.Error("Out of cheese." ) switch success ( case let .Result(zonsopgang, zonsondergang): let serverResponse = "Zonsopgang is op \(zonsopgang) en zonsondergang is op \(zonsondergang)." case let .Error(error): let serverResponse = "Fout.. .\(fout)" )

Laten we experimenteren
Voeg een derde optie toe aan een meerkeuzeschakelaarinstructie

Merk op hoe de tijden van zonsopgang en zonsondergang uit het ServerResponse-object worden gehaald.
Protocollen en uitbreidingen.
Om een ​​protocol te declareren, gebruikt u het protocol-trefwoord.

ProtocolvoorbeeldProtocol ( var simpleDescription: String ( get ) muterende func Adjust() )
Protocollen kunnen worden ondersteund door klassen, opsommingen en structuren.

Class SimpleClass: VoorbeeldProtocol ( var simpleDescription: String = "Een zeer eenvoudige klasse." var anotherProperty: Int = 69105 func Adjust() ( simpleDescription += " Nu 100% aangepast." ) ) var a = SimpleClass() a.adjust( ) let aDescription = a.simpleDescription struct SimpleStructure: VoorbeeldProtocol ( var simpleDescription: String = "Een eenvoudige structuur" muterende func Adjust() ( simpleDescription += " (aangepast)" ) ) var b = SimpleStructure() b.adjust() let bBeschrijving = b.simpleDescription

Laten we experimenteren
Maak een enum dat dit protocol implementeert.

Let op het muterende sleutelwoord in de SimpleStructure-definitie, dat de compiler vertelt dat de corresponderende methode de structuur wijzigt. De methoden van de klasse SimpleClass hoeven daarentegen niet als muterend te worden gemarkeerd, omdat de methoden van de klasse deze altijd zonder interferentie kunnen wijzigen.

Om nieuwe methoden of klasseleden aan een bestaand type toe te voegen, moet u extensies gebruiken. U kunt ook extensies gebruiken om een ​​protocol met een bestaand type te implementeren, zelfs als dit uit een bibliotheek of raamwerk is geïmporteerd.

Extensie Int: VoorbeeldProtocol ( var simpleDescription: String ( return "Het getal \(self)" ) muterende func Adjust() ( self += 42 ) ) 7.simpleDescription

Laten we experimenteren
Maak een extensie van het type Double met een lidvariabele absoluteValue .

U kunt de protocolnaam net als elk ander type gebruiken, bijvoorbeeld om een ​​array van objecten van verschillende typen te maken, maar een gemeenschappelijk protocol implementeren. Houd er rekening mee dat wanneer u met objecten van dit type werkt, methoden die buiten het protocol zijn gedeclareerd, niet beschikbaar zullen zijn.

Laat protocolValue: VoorbeeldProtocol = a protocolValue.simpleDescription // protocolValue.anotherProperty // Verwijder commentaar om de fout te zien
Hoewel de protocolValue-variabele tijdens runtime van het type SimpleClass is, gaat de compiler ervan uit dat het type PreviewProtocol is. Dit betekent dat u niet per ongeluk toegang kunt krijgen tot methoden of klasseleden die buiten het Voorbeeldprotocol zijn geïmplementeerd.

Generieke typen
Om een ​​generiek type te maken, plaatst u de naam in punthaken (<>).

Func herhalen (item: ItemType, tijden: Int) -> ItemType ( var result = ItemType() for i in 0..times ( result += item ) return result ) repeat("knock", 4)
Creëer generieke functies, klassen, opsommingen en structuren.

// Implementeer het optionele type enum OptionalValue van de Swift-standaardbibliotheek opnieuw ( case Geen case Some(T) ) var mogelijkInteger: OptioneleWaarde = .Geen mogelijkGeheel getal = .Sommige(100)
Als u specifieke vereisten voor een generiek type wilt specificeren, zoals het implementeren van een protocol of vereisen dat het van een bepaalde klasse overerft, gebruikt u where .

Func anyCommonElements (lhs: T, rhs: U) -> Bool ( voor lhsItem in lhs ( voor rhsItem in rhs ( if lhsItem == rhsItem ( return true ) ) ) return false ) anyCommonElements(, )

Laten we experimenteren
Wijzig de functie anyCommonElements om een ​​array met gemeenschappelijke elementen te retourneren.

In eenvoudige gevallen kunt u de waar weglaten en de protocol- of klassenaam achter de dubbele punt schrijven. Uitdrukking is gelijk aan de uitdrukking .

Zoals al meerdere keren opgemerkt, onder meer door , was de conferentie uitstekend, ook al werd er geen hardware gepresenteerd. De softwareproducten alleen waren voldoende. Hoeveel het publiek van de conferentie hield, blijkt uit het feit dat er daarna niets opvallends gebeurde, traditioneel voor dergelijke gevallen.

En terwijl de meeste van wat werd gepresenteerd werd door het publiek behoorlijk verwacht, de programmeertaal bleek een echte verrassing. Niemand vermoedde tenslotte zelfs dat Apple ermee bezig was in deze richting. De programmeertaal is echter niet de iPad; dit soort ontwikkelingen zijn voor het grote publiek van weinig belang. Dit betekent dat het handhaven van de geheimhouding veel gemakkelijker was.

Het meest geheime project

Het werk aan Swift begon zelfs in 2010, na de presentatie van de iPad. Het bedrijf wilde een eenvoudige, handige en functionele tool creëren die het leven voor ontwikkelaars zo gemakkelijk mogelijk zou maken.

De werkzaamheden werden in strikt vertrouwen uitgevoerd. Bovendien werkte er lange tijd slechts één persoon aan het project: Chris Lattner, directeur van de afdeling Developer Tools. Uiteraard moest daarna het personeelsbestand worden uitgebreid. Maar toch is het aantal van deze mensen nooit groot genoeg geweest. Weinig mensen wisten van de ontwikkeling van een nieuwe taal, zelfs binnen de muren van Apple zelf, hoewel dit in 2013 werd beschouwd als het belangrijkste Developer Tools-project. Het is belangrijk op te merken dat het bedrijf meteen het eindproduct wilde presenteren en allerlei bètaversies wilde vermijden. Daarom strekten de werkzaamheden zich uit tot 2014.

Hier zou het passend zijn om iets over Lattner zelf te praten. Hij kwam in 2005 bij Apple, daarvoor werkte hij ten behoeve van het LLVM-project aan de Universiteit van Illinois, als een van de toonaangevende ontwikkelaars.

LLVM ( Laag niveau Virtual Machine) is een virtuele machine op laag niveau, een universeel systeem voor transformatie, optimalisatie en analyse van programma's. Het project begon als een zelfstandig project, maar kreeg vervolgens aanzienlijke steun van buitenaf. Onder meer van Apple zelf, dat LLVM vervolgens actief gebruikte in zijn eigen projecten, waaronder OS X en iOS. Hetzelfde metaal werd met dit systeem ontwikkeld.

Niet zonder LLVM in het geval van Swift. Met behulp van dit systeem wordt de taal gecompileerd tot machinecode die is geoptimaliseerd om maximaal voordeel te behalen bij het gebruik van de applicatie op Apple-technologie.

Ooit was de overstap van Chris Lattner naar Apple een meer dan logische stap. Niet minder logisch was de beslissing om de ontwikkeling van een nieuwe taal aan hem toe te vertrouwen. Het is nog te vroeg om een ​​definitief oordeel te vellen, maar het lijkt erop dat hij de taak uitstekend heeft volbracht.

Kenmerken van Swift

Het geesteskind van de nieuwste ontwikkelingen, de gecompileerde objectgeoriënteerde programmeertaal Swift, bouwt voort op talen als Objective-C en C en brengt het beste daarvan samen. Er zijn geen beperkingen op het gebied van compatibiliteit; talen kunnen perfect naast elkaar bestaan ​​in één applicatie. Dit laatste is trouwens erg belangrijk, omdat het al bestaat grote hoeveelheid programma's geschreven in Objective-C.

Interessant genoeg verscheen het vage idee van Swift in de tijd van NeXT, toen de ontwikkeling van Objective-C nog maar net was begonnen. Toen ontstond het idee om een ​​taal te creëren die het programmeerproces eenvoudiger en leuker kon maken. Maar zoals we zien, kostte het veel tijd om dit idee te implementeren.

In feite is het niet zo eenvoudig om die regel te vinden als de code eenvoudig genoeg is om te typen, maar tegelijkertijd leesbaar genoeg om externe ontwikkelaar stukken van het programma van iemand anders zonder commentaar kunnen begrijpen. Een programma geschreven in Pascal is bijvoorbeeld gemakkelijk te begrijpen, maar de code is te lang. Met PERL kun je alles in een paar regels schrijven, maar wordt gekenmerkt door extreem onleesbare code.

Ondertussen beweren sommige ontwikkelaars die Swift al in de praktijk hebben geprobeerd dat Apple erin is geslaagd zo dicht mogelijk bij het ideaal te komen, om de gulden middenweg te vinden tussen leesbaarheid en typgemak.

Zoals meteen duidelijk blijkt uit de naam van de nieuwe taal ( "snel" - Engels. "snel, snel"), lag de nadruk tijdens de creatie vooral op snelheid. Er wordt met name gesteld dat een programma in Swift 1,3 keer sneller zal werken vergeleken met een soortgelijk programma geschreven in Objective-C.

Bij de ontwikkeling van Swift is bovendien rekening gehouden met het volgende: belangrijke parameters zoals eenvoud, veiligheid en flexibiliteit. Deze taal elimineert hele klassen onveilige code en is in staat tot automatisch geheugenbeheer. Swift elimineert de mogelijkheid om een ​​aantal fouten te maken die zo vaak voorkomen bij beginnende programmeurs. Wat de eenvoud betreft, wordt dit goed bevestigd door het feit dat het er binnen 24 uur vanaf het moment al op staat.

De makers hebben veel moeite gestoken in het expressiever en begrijpelijker maken van de Swift-code. De ontwikkelaar kan de resultaten van zijn creativiteit onmiddellijk volgen door afzonderlijke delen van de code in de zogenaamde. "interactieve speeltuinen" (interactieve speeltuinen). Als het uitvoeren van de code behoorlijk veel tijd kost, kunt u het proces volgen op een speciale feedbackregel die voor dit doel verschijnt. Nadat de code is verbeterd en het algoritme is geperfectioneerd, verplaatst de ontwikkelaar deze eenvoudigweg naar zijn project. Speeltuinen kunnen niet alleen nuttig zijn om het ontwikkelingsproces te vereenvoudigen, maar ook om uw Swift-vaardigheden aan te scherpen.

Een traditionele "Hello, World"-applicatie ziet er als volgt uit in Swift:

println("Hallo wereld")

En hier is nog een voorbeeld van eenvoudige code:

laat appels = 3
laat sinaasappels = 5
let appleSummary = "Ik heb \(appels) appels."
let fruitSummary = "Ik heb \(appels + sinaasappels) stukjes fruit."

Kritiek op Swift

Ondertussen verschijnen er ook openlijk negatieve meningen over Swift op internet. Er zijn zorgen dat dit een doodlopend ontwikkelingspad is en dat Swift nooit populair zal worden. Zelfs daarvoor waren er immers veel programmeertalen die precies waren gemaakt met als doel het leven van programmeurs gemakkelijker te maken en het leerproces te vereenvoudigen. En niet één van hen kon de hem toegewezen taken volledig uitvoeren. Het enige dat hun makers wisten te bereiken, was simpelweg het toch al aanzienlijke aantal programmeertalen vergroten.

Er is kritiek op de acties van Apple, die "beter af zouden zijn om talen als Python of Ruby te ontwikkelen, in plaats van er nog een te creëren." Dergelijke woorden worden ondersteund door de mening dat deze tools al actief worden gebruikt door ontwikkelaars van over de hele wereld. Ik kwam toevallig ook een mening tegen volgens welke Apple tevergeefs zijn gok op snelheid maakt. Ze zeggen dat dit op de moderne niveaus van ijzerontwikkeling niet zo belangrijk is.

Maar wat de meeste irritatie veroorzaakt is het feit (zoals altijd in zulke gevallen) dat Apple iets alleen voor zichzelf heeft gecreëerd, volgens zijn eigen normen en op zijn eigen principes. Bovendien wordt gesteld dat hoewel Swift niet veel verschilt van veel andere talen, het bedrijf opnieuw de creatie van een fundamenteel nieuw product verklaart.

In plaats van een nawoord

Je kunt Apple bekritiseren omdat het overdreven gesloten en arrogant is. Je kunt de eenvoud van Swift en de netheid van de code bewonderen. Maar feit blijft dat de toekomst van de nieuwe programmeertaal nog steeds onduidelijk is. En er zijn twee ontwikkelingsscenario’s mogelijk.

Scenario één. Swift blijft gewoon een interessante ontwikkeling. Het wordt gebruikt, maar niet te actief, en blijft bij voorkeur werken met het beproefde en bekende Objective-C. Ontwikkelaars voor andere platforms merken helemaal niets van de opkomst van een nieuwe taal.

Scenario twee. De benaderingen die in Swift worden gebruikt, worden de norm in de programmeerwereld. Apple slaagt er opnieuw in de hele wereld te beïnvloeden door de onder ontwikkelaars algemeen aanvaarde normen te veranderen. Het idee van ‘speeltuinen’, gekoppeld aan de transparantie van de code van de nieuwe taal, zou wel eens een revolutie teweeg kunnen brengen in het leren programmeren. En dit zal ons in staat stellen het hele onderwijsproces volledig te heroverwegen en de opkomst van een nieuwe generatie programmeurs uit te lokken.

Het zou mij trouwens niet verbazen als Apple over een paar jaar, nadat het Swift grondig heeft ‘opgepoetst’ en het tot in de perfectie heeft gebracht, verklaart dat het van plan is Objective-C helemaal achter zich te laten en op een nieuwe taal te vertrouwen.

Ik gebruik technologie Appel nog sinds het ‘klassieke tijdperk’, sinds 1995. Gedurende deze periode heb ik meer dan één plotselinge en belangrijke (en soms ronduit schokkende) ‘revolutie’ gezien in de ontwikkeling van het bedrijf. Wat ondanks alles zijn charme niet heeft verloren. Ik geloof dat dit zo zal blijven.

Vasili Usov “Snel. Basisprincipes van applicatieontwikkeling voor iOS" St. Petersburg, 2016, 304 pagina's (6,07 mb. pdf)

Het boek biedt ontwikkelaars informatie over de basisprincipes van programmeren in Swift, een programmeertaal die speciaal is ontworpen voor het maken van applicaties in . Dit is een snelle, slimme, veilige en functionele objectgeoriënteerde taal. Het werd in 2014 gemaakt en geïntroduceerd en werd een grote verrassing en maakte furore in de iOS-omgeving. Er ging slechts een jaar voorbij en Apple updatete het naar versie 2.0 en vervolgens naar 2.1, die een aantal belangrijke innovaties bevatte.

Ingediend praktische gids bevat de meest complete informatie over programmeertechnologie in Swift. Iedereen die wil leren hoe hij applicaties voor iOS kan maken, kan het boek als naslagwerk en leerboek gebruiken, vrijwel zonder zich tot andere publicaties te wenden. Het boek geeft niet alleen theorie, maar laat ook het gebruik van taalconstructies zien aan de hand van een groot aantal voorbeelden. En om de kennis te consolideren en alle fijne kneepjes van de taal beter te begrijpen, wordt de lezer uitgenodigd om een ​​aantal praktische taken uit te voeren. Door Swift-programmeren te leren, kun je krachtige en boeiende apps ontwikkelen voor iOS, OS X, tvOS of watchOS. ISBN: 978-5-496-02256-9

Inleiding 8
Over Swift9
Over boek 10

Deel I: Introductie van Xcode 13

Hoofdstuk 1. Eerste stappen 14
1 .1 .Je hebt nodig Mac-computer 14
1 .2. Registreren als Apple-ontwikkelaar 14
1.3.Installeer Xcode 16

Hoofdstuk 2. Xcode-omgeving en speeltuinprojecten 18
2.1.Inleiding tot Xcode 18
2.2.Interface van het speeltuinproject 21
2.3. Mogelijkheden van het speeltuinproject 23

Deel II. Basis Swift-functies 27

Hoofdstuk 3. Een startpunt 28
3.1.Waarde instellen en wijzigen 29
3.2.Variabelen en constanten 31
3.3.Regels voor het declareren van variabelen en constanten 34
3.4.Uitvoer van tekstinformatie 35
3 .5. Opmerkingen 37
3.6.Puntkomma 39

Hoofdstuk 4. Gegevenstypen en bewerkingen ermee 40
4.1.Typen definitie van gegevenstypen 40
4 .2 .Numerieke typen gegevens 43
4 .3 .Teksttypen gegevens 56
4.4.Logische waarden 62
4.5.Type aliassen 65
4.6 Vergelijkingsoperatoren 67

Deel III. Snelle vaste activa 69

Hoofdstuk 5. Tupels 70
5.1.Basisinformatie over tupels 70
5.2 Interactie met elementen van tupel 72

Hoofdstuk 6. Optionele gegevenstypen 78
6.1.Optionele opties 78
6.2.Ophalen van optionele waarde 80

Hoofdstuk 7. Verklaringen 83

Hoofdstuk 8. Stroomcontrole. Vertakking 86
8.1 Voorwaardelijke operator indien 86
8.2.Bewakeroperator 97
8.3.Bereikoperatoren 98
8.4.Bediener takken wisselen 98

Hoofdstuk 9 Verzamelingstypen 109
9.1.Matrices 109
9.2.Sets 120
9.3.Woordenboeken 128

Hoofdstuk 10. Stroomcontrole. Herhalingen 135
10.1.Herhalingsoperator voor 135
10.2. Herhalingsoperatoren while en repeat while 142
10.3.Cyclusbeheer 144

Hoofdstuk 11. Functies 148
11.1.Functies declareren 148
11.2.Invoerparameters en retourwaarde 151
11.3.Functielichaam als waarde 162
11.4.Geneste functies 163
11.5.Herlaadfuncties 164
11.6.Recursieve functieaanroepen 165

Hoofdstuk 12. Sluitingen 167
12.1.Functies als afsluitingen 167
12.2 Afsluitende uitdrukkingen 170
12.3.Impliciete terugkeer van waarde 171
12.4.Verkorte parameternamen 172
12.5.Sluitingsvariabelen 174
12.6 Variabelen vastleggen 175
12.7 Methode voor het sorteren van arrays 176

Deel IV. Niet-triviale kenmerken van Swift 178

Hoofdstuk 13. OOP als basis 180
13.1.Instanties 180
13.2.Naamruimten 182

Hoofdstuk 14. Overdrachten 184
14.1.Opsommingsyntaxis 184
14.2.Bijbehorende parameters 187
14.3 Schakelverklaring voor opsommingen 189
14.4.Geassocieerde waarden van opsommingsleden 190
14.5.Eigenschappen in opsommingen 192
14.6.Methoden in opsommingen 193
14 .7 .zelfbediening 194
14.8.Recursieve opsommingen 195

Hoofdstuk 15. Structuren 199
15.1.Syntaxis voor het declareren van structuren 199
15.2.Eigenschappen in constructies 200
15.3.Structuur als naamruimte 202
15.4.Aangepaste initialisatiefuncties 203
15.5.Methoden in structuren 204

Hoofdstuk 16. Klassen 206
16.1.Klassesyntaxis 207
16.2.Eigenschappen van klassen 207
16.3.Klassemethoden 210
16.4.Klasse-initialisatoren 211
16.5.Geneste typen 212

Hoofdstuk 17. Eigenschappen 214
17.1.Eigendomstypen 214
17.2. Controle van ontvangst en instelling van waarden 216
17.3.Eigenschappen van type 220

Hoofdstuk 18. Abonnementen 223
18.1.Doel van subscripts 223
18.2.Subscript-syntaxis 224

Hoofdstuk 19. Erfenis 229
19.1.Overervingssyntaxis 229
19.2.Herdefiniëren van overgeërfde elementen 231
19.3.Preventief laatste modificator 234
19.4.Vervanging van klasse-instanties 235
19.5.Typegietstuk 235

Hoofdstuk 20. Aliassen Elke en Elke 238
20 .1 .Bijnaam Willekeurig 238
20.2.Alias ​​AnyObject 240

Hoofdstuk 21. Initialisatoren en deïnitializers 241
21.1.Initialisatoren 241
21.2.Deïnitialisatoren 248

Hoofdstuk 22. Instanties en ARC's verwijderen 250
22.1.Vernietiging van exemplaren 250
22.2.Geheugenlekken 252
22.3. Automatische referentietelling 255

Hoofdstuk 23. Optionele kettingen 258
23.1.Toegang tot eigendommen via optionele ketens 258
23.2 Waarden instellen via optionele ketens 260
23.3.Toegang tot methoden via optionele ketens 261

Hoofdstuk 24. Extensies 262
24.1 Berekende eigenschappen in extensies 263
24.2.Initializers in extensies 264
24.3.Methoden in extensies 265
24.4.Abonnementen in extensies 266

Hoofdstuk 25. Protocollen 267
25.1.Vereiste eigenschappen 268
25.2.Vereiste methoden 269
25.3.Vereiste initialisatoren 270
25.4.Protocol als gegevenstype 271
25.5.Uitbreiding en protocollen 271
25.6.Overerving van protocollen 272
25.7.Klasseprotocollen 273
25.8.Samenstelling van protocollen 274

Hoofdstuk 26. Niet-standaard gegevenstypen en ophalen referentie informatie 275

Hoofdstuk 27. Universele sjablonen 283
27.1.Universele functies 283
27.2.Universele typen 285
27.3.Type 287-beperkingen
27.4.Universele uitbreidingen 288
27 .5 .Gerelateerde typen 288

Hoofdstuk 28. Foutverwerking 291
28.1. Gooifouten 291
28.2.Foutafhandeling 292
28.3 Uitgestelde schoonmaakacties 297

Hoofdstuk 29. Niet-triviaal gebruik van operators 298
29.1.Bedieningsfuncties 298
29.2.Gebruikersoperatoren 301

Download het boek gratis 6,07 MB. pdf

Als je erover nadenkt welke programmeertaal je wilt leren, raden we je aan aandacht te besteden aan Swift, en dit is de reden.

1. Wat is Swift en waarom werd het zo genoemd?

Swift is een krachtige en intuïtieve programmeertaal voor macOS, iOS, watchOS en tvOS, maar verschilt van Objective-C in een breder scala aan mogelijkheden die beperkt bleven tot verbindingen met C. Daarnaast is Swift veilig te noemen omdat de taal sterk getypt: u weet op elk moment precies met welk type object u werkt. Het belangrijkste voordeel is snelheid: zowel bij het werken aan een project als bij het starten van een voltooide applicatie. Het is vanwege dit voordeel ten opzichte van andere talen (volgens de makers heeft het al het beste uit andere programmeertalen geabsorbeerd) dat het Swift werd genoemd (vertaald als snel).

2. Wat moet je leren, Objective-C of Swift?

Deze kwestie is sinds de introductie van Swift uitgebreid besproken, maar net als toen zijn er meer argumenten vóór het bestuderen ervan. En Apple zelf heeft meer dan eens duidelijk gemaakt dat de toekomst bij Swift ligt. Tegelijkertijd kan het parallel met Objective-C worden gebruikt, zodat er geen problemen mee zijn verschillende versies. Om dezelfde reden nemen veel werkgevers het feit serieus dat iemand weigert Objective-C te leren, omdat ze denken dat Swift nog steeds behoorlijk rauw is.

3. Waarom is Swift sneller dan andere talen? Misschien is dit niet waar?

Apple beweert dat Swift tot 2,6 keer sneller is dan Objective-C en 8,4 keer sneller dan Python 2.7. Wij denken dat de vraag waarom je je druk moet maken om snelle code-uitvoering niet opkomt - en dat zou duidelijker moeten zijn snelle code werkt efficiënter en soepeler, waardoor de gebruiker kan genieten van interactie met het apparaat.

4. Ik heb gehoord dat het leren van Swift heel eenvoudig is. Is dat zo?

Wij kunnen zeggen dat dit waar is. Swift is ontworpen om het voor mensen die nieuw zijn met programmeren gemakkelijk te maken om hun eigen apps te maken, waardoor het ongelooflijk eenvoudig wordt om te leren coderen. Apple vergelijkt zijn geesteskind met een scripttaal, en programmeurs vergelijken het met BASIC.

5. Dus ik kan gewoon een applicatie schrijven en deze vrijwel onmiddellijk uploaden naar de App Store?

6. Hoe snel zal ik een professional worden, aangezien alles zo eenvoudig is?

Over het algemeen dit controversieel probleem. Swift verbetert voortdurend, dus alleen de makers ervan zijn de echte experts. Zelfs als je zelf een aantal uitstekende applicaties hebt gemaakt en een aantal geavanceerde cursussen hebt gevolgd en leermiddelen, je zult nog steeds niet een van de beste zijn, en daarom zeggen ze tijdens interviews dat ze voortdurend verbeteren, maar op dit moment nog geen perfectie hebben bereikt).

Hoe dan ook, als je eenmaal met Swift hebt gespeeld en er gevoel voor hebt gekregen, hebt ontdekt of je het leuk vindt of niet, en aan echte projecten bent gaan werken, dan kun je zeggen dat je er in ieder geval naar streeft een professional te worden. Over het algemeen hangt het allemaal van jou af.

7. Maar waarom was het nodig om een ​​nieuwe taal te creëren als de oude werkte?

Objective-C was ooit de belangrijkste programmeertaal van Apple voor het schrijven van apps, daterend uit de tijd van OS X. Maar in die tijd zijn talen en programmeerpraktijken veel veranderd, vooral op het gebied van mobiele ontwikkeling. In plaats van het oude te verfijnen, besloot Apple een andere weg in te slaan en de manier waarop ontwikkelaars werken te veranderen, waardoor het proces interactiever werd.

8. Hoe zit het met het feit dat Swift nog niet volledig ontwikkeld is?

Nou, dat is geen feit in de komende tijd Appel jaren zal de ontwikkeling van Swift afmaken, omdat dit betekent dat het moet worden gedood. Hier bestaat, net als bij elke nieuwe taal, de mogelijkheid van fouten. Maar alles wordt voortdurend bijgewerkt, omdat het in het belang van Apple zelf is. Trouwens, binnen Google al overweegt de mogelijkheid om Swift-applicaties op Apple te lanceren, dus hij heeft nog een lange weg te gaan.

9. Ik heb ooit programmeertalen gestudeerd. Hoe is deze taal?

Hoogstwaarschijnlijk in Ruby of Python. Al kun je hier ook de syntaxis van C leren.

10. Ik hoorde iets over cacao. Meer?

Cocoa en Cocoa Touch zijn raamwerken die respectievelijk op OS X en iOS draaien. Beiden zijn voornamelijk geïmplementeerd met Objective-C en geïntegreerd met Xcode (als je het nog niet weet: het is een ontwikkelomgeving). Ze bestaan ​​uit bibliotheken, API's en runtimes. Omdat Swift een iOS-ontwikkeltaal is, werkt het ook met Cocoa en Cocoa Touch. Indien interessant,