Swift fra Scratch: Delegering og Properties
31
Del
5
Del
Dette Cyber mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av
Dette innlegget er en del av en serie som heter Swift fra Scratch.Swift fra Scratch:. Arv og ProtocolsSwift fra Scratch: Access Control og formues Observatører
I forrige tutorial, skapt deg din første Swift prosjekt i Xcode, en enkel to-do-programmet. I denne utgaven av Swift fra Scratch, kommer vi til å legge evnen til å skape gjøremål. Underveis vil du lære om handlinger, delegering, og eiendommer.
Forutsetninger
Hvis du ønsker å følge med meg, så sørg for at du har Xcode 6.3 eller høyere installert på din maskin. I skrivende stund, Xcode 6.3 er i beta og tilgjengelig fra Apples iOS Dev Center til registrerte iOS-utviklere.
Bakgrunnen for å kreve Xcode 6.3 eller høyere er å være i stand til å dra nytte av Swift 1.2, som Apple introdusert for noen dager siden. Swift 1.2 introduserer en rekke store filer som vi vil dra nytte av i resten av denne serien.
1. Legge Elementer
På slutten av denne opplæringen, vil brukeren kunne legge til nye gjøremål ved å trykke på en knapp i navigasjonsfeltet, presentere en visning med et tekstfelt og en knapp. La oss begynne med å lage visningen controller som vil håndtere legge til nye gjøremål, den AddItemViewController klassen
Trinn 1:. Opprett AddItemViewController
Velg Ny > Fil ... fra Xcode Fil-menyen og velg Cocoa Class mal fra listen over iOS > Kilde maler.
navn klassen AddItemViewController og sørg for at den arver fra UIViewController. Dobbeltsjekk at språk er satt til Swift og også skape XIB filen er avmerket.
Fortell Xcode hvor du vil lagre filen for AddItemViewController klasse og klikk på Opprett.
Trinn 2 : Legge Outlets og handlinger
Før vi lage brukergrensesnittet til AddItemViewController klasse, må vi opprette et utløp for tekstfeltet og to handlingene, en for en avbryt-knapp i navigasjonsfeltet, og en annen for skape knappen under tekstfeltet.
Legge et uttak bør være kjent nå. Lag en stikkontakt i AddItemViewController klassen og name it tekstfeltet som vist nedenfor
klasse AddItemViewController. UIViewController {IBOutlet Var Textfield: UITextField! styre func viewDidLoad () {super.viewDidLoad ()} overstyring func didReceiveMemoryWarning () {super.didReceiveMemoryWarning ()}}
Opprette en handling er svært lik skape en instansmetode. Faktisk er denIBAction attributt noe mer enn et hint for Interface Builder. Med prefikset en metode medIBAction attributt, er Interface Builder klar over metoden, som gjør oss i stand til å koble den i dreieboken. Vi vil forlate kroppene til begge handlinger tomme for nå
klasse AddItemViewController. UIViewController {IBOutlet Var Textfield: UITextField! styre func viewDidLoad () {super.viewDidLoad ()} overstyring func didReceiveMemoryWarning () {super.didReceiveMemoryWarning ()}IBAction func avbryte (avsender: AnyObject) {}IBAction func lage (avsender: AnyObject) {}}
Trinn 3: Opprett User Interface
Åpne Main.storyboard i prosjekt Navigator og dra en View Controller fra objektbiblioteket til høyre. Med utsikt kontrolleren valgt, åpner Identity Inspektør på høyre og sette Custome Class > Klasse til AddItemViewController
For å legge til en navigasjonslinjen for å legge til elementer, og velg Legg til element View Controller og velg Embed In >.; Navigation Controller fra Editor menyen. Dette vil gjøre å legge til elementer View Controller roten visning kontrolleren av en navigasjonskontrolleren.
Det neste trinnet er å legge en bar knapp element på navigeringslinjen i View Controller-ikke legge til elementer View Controller-og sette sitt Identifier til Legg i Attributter Inspector.
Når brukeren kraner knappen Legg til, legge til elementer View Controller skal presenteres modally. For å oppnå dette, Kontroll-Dra fra knappen Legg til Navigation Controller, velge stede modally fra menyen som dukker opp. Dette vil skape en naturlig overgang fra å legge til elementer View Controller til den nye Navigation Controller.
Dra et tekstfelt og en knapp fra objektbiblioteket og legge dem til å legge til elementer View Controller scene. Velg Legg til element View Controller og koble tekstfeltet stikkontakt med tekstfeltet og skape: action med knappen. Den skaper: aksjon skal utløses når Touch Up Inside hendelsen er avfyrt. Endre tittelen på knappen for å endre og legge de nødvendige layout begrensninger til tekstfeltet og knappen.
For å avslutte brukergrensesnittet, legge til en bar knapp element til øverst til venstre i navigasjonsfeltet for å legge til elementer View Controller og sette Identifier å avbryte. Med å legge til elementer View Controller valgt, åpner Connections Inspector og koble Avbryt: tiltak for å Avbryt-knappen
Bygg og kjøre programmet ved å trykke på Kommando-R for å kontrollere at alt er koblet riktig Når brukeren kraner på Opprett-knappen for å legge til et gjøremål element, må tillegget elementet visning kontrolleren til å melde fra til visningen kontrolleren. Delegering er en perfekt løsning for dette scenariet. Prosessen er ganske enkel. Vi skaper en delegat protokollen ViewController klassen er i samsvar med. Når AddItemViewController forekomsten blir opprettet-når brukeren kraner på knappen Legg-the ViewController objektet er angitt som delegat på AddItemViewController eksempel, slik at sistnevnte til å varsle ViewController eksempel når en ny oppgave elementet er opprettet. La oss bryte det ned for bedre å forstå denne prosessen Åpne AddItemViewController.swift og erklære AddItemViewControllerDelegate protokollen under import uttalelse på toppen. Protokollen erklæring ligner på en klassedeklarasjon. Protokollen søkeord er etterfulgt av navnet på protokollen Konseptet er veldig likt protokoller i Objective-C. Navnet på protokollen er AddItemViewControllerDelegate og den definerer en metode, controller (controller: didAddItem :) objektet som må gjennomføre representanten protokollen er delegat av AddItemViewController. Vi må først opprette en eiendom for representanten som vist i tekstutdraget nedenfor delegat Eiendommen er av typen AddItemViewControllerDelegate ?, en valgfri type, siden vi ikke kan være sikre på at representanten eiendommen ikke er null. Legg merke til at navnet på protokollen ikke er innpakket i vinkelparenteser som i Objective-C delegat metode, controller (controller: didAddItem :), vil påberopes skape: action som vist nedenfor. For å holde eksempel enkelt, gjør vi ikke noe validering på brukerens input. Vi trygt pakke verdien som er lagret i representantens eiendom, noe som betyr at representanten metoden er bare påberopes dersom representanten eiendommen ligger. Verdien av tekstfeltet lagres midlertidig i en konstant heter element Gjennomføringen av avbryte: handlingen er enkel. Alt vi gjør er forkaster AddItemViewController eksempel Det er ett brikke i puslespillet mangler skjønt. Representanten eiendommen av AddItemViewController eksempel ikke blir satt i øyeblikket. Vi kan løse dette ved å implementere prepareForSegue (_: avsender :) metoden i ViewController klassen. Men først må vi se storyboardet. Åpne Main.storyboard og velg naturlig overgang kobler knappen Legg til Navigation Controller. Åpne attributter Inspector og setter naturlig overgang er Identifier å AddItemViewController Deretter implementere prepareForSegue (_:. Avsender :) metoden i ViewController klassen som vist nedenfor. Legg merke til overstyring søkeord prefixing metoden. Dette bør være kjent nå Vi starter med å sjekke identifikatoren til naturlig overgang, slik at vi forbereder for riktig naturlig overgang. Vi deretter be naturlig overgang for sin destinasjon view controller. Du kan forvente at dette skal være den AddItemViewController eksempel, men husk at vi har gjort visningen kontrolleren roten visning kontrolleren av en navigasjonskontrolleren. Dette betyr at vi må stille navigasjons kontrolleren, naturlig overgang destinasjon view controller, for sin topp utsikt controller. addItemViewController konstant er av typen AddItemViewController? på grunn av bruken av den som? søkeord. Med andre ord, ved å anvende som? vi nedbrutte verdien av topViewController eiendommen til en valgfri type. I hvis setningen, pakke vi den valgfrie og sette representanten eiendom til ViewController eksempel. Jeg er sikker på at du ' har lagt merke til bruk av flere optionals i gjennomføringen av prepareForSegue (_: avsender :) metode. Når vi samhandler med Objective-C APIer, er det alltid bedre å spille det trygt. Når du sender meldinger til null er helt greit i Objective-C, er det ikke i Swift. På grunn av denne forskjellen, du alltid må være forsiktig når vi samhandler med Objective-C APIer i Swift. Eksempelet ovenfor illustrerer dette godt Implementere AddItemViewControllerDelegate protokoll ligner på gjennomføringen av UITableViewDataSource protokollen. Vi starter med konform den ViewController klassen til protokollen som vist nedenfor Neste, vi implementere metoder for AddItemViewControllerDelegate protokollen, som koker ned til implementere kontrolleren (controller: didAddItem :) metode. Vi legger det nye elementet til visningen kontrolleren elementer eiendom, oppdater bordvisningen og avsette add elementvisningen controller Bygg og kjøre programmet for å teste om du kan legge til nye elementer i to-do liste. Vi har for øyeblikket ikke validere brukerens input. Som en øvelse, viser et varsel utsikt til brukeren hvis de trykker på knappen Opprett og tekstfeltet er tomt. Legge til en blanc to-do er ikke veldig nyttig. Høyre? Hvis du er interessert i å ta din Swift utdanning til neste nivå, kan du ta en titt på vår fulle kurs på Swift utvikling. I denne opplæringen, lært deg hvordan å erklære og implementere en tilpasset protokoll. Du har også lært hvordan du oppretter handlinger og koble dem opp i Interface Builder. I neste uke avdrag, skal vi fullføre våre gjøremål søknad ved å legge muligheten til å slette gjøremål, og vi vil også forbedre programmets brukeropplevelsen.
2. Implementere
Delegat Protocol
Trinn 1:. Erklærer
AddItemViewControllerDelegate Protocol
importere UIKitprotocol AddItemViewControllerDelegate {func kontrolleren (controller: AddItemViewController, didAddItem: String)}.
Trinn 2:. Erklærer delegat Eiendom
klasse AddItemViewController. UIViewController {IBOutlet Var Textfield: UITextField! Var delegat: AddItemViewControllerDelegate? ...}
Trinn 3:. Gjennomføre tiltak
IBAction func lage (avsender: AnyObject). {La element = self.textField.text hvis la delegat = self.delegate {delegate.controller (selv, didAddItem: element)}}
IBAction func avbryte (avsender: AnyObject). {Self.dismissViewControllerAnimated (sant, ferdigstillelse: null)}
Trinn 4: Stille delegat
styre func prepareForSegue (naturlig overgang: UIStoryboardSegue, avsender:? AnyObject). {If segue.identifier == "AddItemViewController" {la navigationController = segue.destinationViewController som? UINavigationController la addItemViewController = navigationController? .topViewController Som? AddItemViewController hvis la viewController = addItemViewController {viewController.delegate = self}}}
Trinn 5:. Implementering
AddItemViewControllerDelegate Protocol
klasse ViewController. UIViewController, UITableViewDataSource, UITableViewDelegate, AddItemViewControllerDelegate {...}
//MARK:. Legg til element View Controller Deleger Methodsfunc kontrolleren (controller: AddItemViewController, didAddItem: String) {//oppdater datakilde self.items.append (didAddItem) //Last Tabell self.tableView.reloadData () //Avvis Legg til element View Controller self.dismissViewControllerAnimated (sant, ferdigstillelse: null)}
Trinn 6: Bygg og Kjør
Les mer i vår Swift Programmering Course
Konklusjon