>> [Παίζει μουσική]
>> DAN AMRMENDARIZ: Ο καθένας, καλώς ήλθατε στο σεμινάριο CS50,
iOS App Ανάπτυξης με Swift.
Είμαι Νταν Armendariz, και είμαι διδάσκαλος της επιστήμης των υπολογιστών εδώ στο Χάρβαρντ.
>> Και την επόμενη ώρα θα είναι ένας ανεμοστρόβιλος περιοδεία του ως πολλά πράγματα
σχετικά με αυτό το θέμα, όπως μπορούμε να χωρέσουν.
Θα τοποθετήσω όλα του πηγαίου κώδικα ότι θα δούμε σήμερα στο διαδίκτυο.
Εμείς μπορεί να μην είναι σε θέση να πραγματικά να πάμε πάνω από όλα
ότι είμαι ότι είμαι δείχνοντάς σας σε αυτή την ώρα.
Αλλά τουλάχιστον ελπίζουμε ότι μέσα από τα σχόλια του πηγαίου κώδικα,
θα είστε σε θέση να προσπαθήσουμε να καταλάβουμε τι ακριβώς συμβαίνει για αυτά τα πράγματα
ότι δεν είναι αρκετά για να πάρει.
>> Συνολικά, η δομή του η σημερινή συζήτηση θα είναι ως εξής.
Θα ξεκινήσουμε να κάνει κάποιες βασικές σύνταξη με τη γλώσσα Swift,
υπεισέλθω σε μερικά από τα πιο προηγμένα συντακτικό της γλώσσας Swift.
Επειδή η γλώσσα είναι πραγματικά μοντέρνα και
έχει πολύ υψηλό επίπεδο χαρακτηριστικά, τα πράγματα που δεν έχουμε
δει σε C σε όλη CS50, ή ακόμη και ορισμένοι οι άλλες γλώσσες
ότι έχουμε αρχίσει χρήση σε CS50 όπως PHP,
έτσι είμαι πρόκειται να πρέπει να προσπαθήσουν να εισάγουν επίσης κάποια θέματα τα οποία
σχετίζονται με υψηλότερο επίπεδο γλώσσες ότι δεν μπορείτε να δείτε σε βάθος στο CS50,
αλλά θα δείτε στη συνέχεια μαθήματα επιστήμης των υπολογιστών.
Γι 'αυτό πρόκειται να είναι μια πυκνά ώρα.
Και παρακαλώ αισθανθείτε ελεύθερος να με αφήσει ξέρω εάν έχετε οποιεσδήποτε ερωτήσεις.
Έτσι, αν σας ενδιαφέρει με τον τρόπο ανάπτυξης
με Swift, ή πραγματικά οποιαδήποτε ανάπτυξη app iOS,
υπάρχουν μερικές απαιτήσεις.
Πρώτα απ 'όλα, θα πρέπει να χρησιμοποιείτε ένα Mac, που τρέχει στα παραδείγματα
ότι θα πρέπει να χρησιμοποιείτε σήμερα, μια σχετικά νέα έκδοση του λειτουργικού συστήματος
X. Στην περίπτωση αυτή, τρέχω X 10.5.
Μπορείτε να εκτελείτε 10.11, αν θέλετε.
Αλλά ό, τι πρόκειται να δείτε εμπλέκει Xcode 7 και αργότερα,
το οποίο διαθέτει την τελευταία έκδοση του Swift, η οποία είναι Swift 2.0.
Αυτό είναι πραγματικά ένα πολύ σημαντική διάκριση.
Ένα μεγάλο μέρος της σύνταξης έχει άλλαξε αρκετά σημαντικά
σε ορισμένες περιπτώσεις, από το Swift 1.0, το οποίο κυκλοφόρησε τον περασμένο χρόνο,
σε Swift 2.0, η οποία μόλις βγήκε αυτό το φθινόπωρο.
Έτσι θα πάμε να δείξουμε Swift 2.0.
Πολλά από τα πράγματα που ψάχνετε για online
όταν προσπαθείτε να πάρετε επιπλέον πληροφορίες σχετικά με μια ποικιλία από πράγματα,
μπορεί να θέλετε να ρητά αναζήτηση για Swift 2
και όχι απλά παλιά Swift να κάνει βεβαιωθείτε ότι μπορείτε να πάρετε το σωστό σύνταξη.
>> Στην πραγματικότητα, αυτό είναι γενικά αλήθεια.
Υπάρχει μια ταχεία ποσό της αναπτυξιακής συμβαίνει στο Swift γλώσσα
από τότε που η Apple κυκλοφόρησε, νομίζω τι, αυτό είναι λίγο περισσότερο από ένα χρόνο
τώρα.
Και τα πράγματα έχουν αλλάξει δραματικά σε αυτό το διάστημα.
Και έτσι δεν πρέπει να απογοητεύονται εάν, όταν ψάχνετε γύρω από
για θέματα σχετικά με Swift ή πώς να ολοκληρώσει κάτι χρησιμοποιώντας κάποια παράδειγμα κώδικα
ή κάτι που δεν το κάνει πράγματι εργάζονται για Swift 2.0.
Βεβαιωθείτε ότι ψάχνετε ειδικά για αυτήν την έκδοση
να προσπαθήσει να ελαχιστοποιηθούν οι επιπτώσεις των διαφόρων εκδόσεις και αυτά τα είδη των πραγμάτων.
>> Θα προσπαθήσω να επισημάνω μόνο μερικά πράγματα που είναι διαφορετικά σε παλαιότερες εκδόσεις.
Αλλά είναι κάτι που πρέπει να προσέξετε.
Αυτό πιθανότατα θα είναι μία από τις μεγαλύτερες πονοκεφάλους
ότι θα έχετε με το Swift είναι η εύρεση παράδειγμα κώδικα που είναι μεγαλύτερης ηλικίας, ακόμα και απλά
από λίγους μήνες, προσπαθεί να χρησιμοποιήσει το πιο σύγχρονο έργο σας.
Και απλά δεν λειτουργεί.
Παίρνετε σφάλματα μεταγλώττισης, σύνταξη λάθη, όλα τα είδη των τρελά πράγματα.
Έτσι απλά να είστε υπομονετικοί με ότι, και ελπίζουμε ότι θα
έχουν μια πολύ ωραία εμπειρία με συνολική Swift.
>> Τώρα μπορείτε πραγματικά join-- και ελπίζω έχουμε στην πραγματικότητα εξακολουθούμε να έχουμε αυτό το αυτό το year--
Apple App CS 50 ομάδα ανάπτυξης, η οποία
θα σας επιτρέψει να εγκαταστήσετε εφαρμογές το οποίο μπορείτε να δημιουργήσετε για iOS συσκευές σας.
Έτσι, ρίξτε μια ματιά σε αυτό το URL, εάν Σας ενδιαφέρει να το κάνουμε αυτό.
>> Έτσι, μόλις δύο πράγματα για τον εαυτό του Swift.
Είναι ένα καταρτίζονται γλώσσα.
Αλλά θα δείτε ότι μερικά από τα χαρακτηριστικά που χρησιμοποιούμε
επιτρέπουν να χρησιμοποιείται επίσης σε ένα κομμάτι σαν ένας τρόπος ερμηνείας, καθώς και.
>> Ένα μεγάλο μέρος της σύνταξης είναι δανεισμένος από C. Είναι βασισμένο και γραμμένο σε C.
Και έτσι θα δούμε ότι Υπάρχουν πολλά φαστ φουντ
από τις υπάρχουσες γνώσεις σας από C που μπορούμε να λιμάνι Swift.
>> Αλλά υπάρχουν πράγματα που καθιστούν πολύ διαφορετική από C.
Είναι πολύ έντονα δακτυλογραφημένη.
Δεν υπάρχει αυτόματη διαχείριση μνήμης.
Δεν πρόκειται να πρέπει να χρησιμοποιείτε malloc ή δωρεάν σε οποιοδήποτε σημείο.
Είναι σχεδιασμένο για γενικότητα.
Έτσι με άλλα λόγια, μπορείτε να το χρησιμοποιήσετε σε όλα τα είδη των πλαισίων, από την Apple ρολόι
για το iPhone σε όλη τη διαδρομή μέχρι το OS X, και ακόμη και ορισμένοι διακομιστές, ακόμη και κάποια scripting.
Αλλά θα δούμε ότι το υποστήριξη για scripting
δεν είναι αρκετά εκεί ακόμα ως είναι σε άλλες γλώσσες.
Έτσι, πιθανότατα θα χρησιμοποιείτε αυτό αποκλειστικά για την ανάπτυξη
στο Mac σας ή το iPhone σας.
>> Και έχει πολλά σύγχρονα χαρακτηριστικά.
Και πολλά από αυτά τα πράγματα είναι πράγματα που θα πάμε για να προσπαθήσουμε να αντιμετωπίσουμε σήμερα,
αλλά και θέματα που μας ότι ειλικρινά, μπορούμε να αφιερώσουμε ολόκληρο μαθήματα.
Στην πραγματικότητα, CS 51, η οποία είναι προσφέρεται επόμενο εξάμηνο,
εστιάζει πολύ για τα θέματα αυτά που περιγράφονται παρακάτω.
Έτσι, μπορείτε να περάσετε ένα ολόκληρο εξάμηνο κατανόηση αυτών των πραγμάτων.
Αλλά θα πάμε να προσπαθήσουμε για να πάρει μέσα από αυτά
τουλάχιστον αρκετό ώστε να μπορεί να καταλάβει τι είναι
συμβαίνει όταν κοιτάς σε Swift πρόγραμμα
και να είναι σε θέση να χαράξει το δρόμο σας μέσα από αυτό για το τελικό σχέδιο.
>> Τώρα, ένας από τους καλύτερους τρόπους που μπορείτε να πάρετε περισσότερες πληροφορίες σχετικά με αυτό
Είναι ειλικρινά μόνο μέσω της Apple υπό την προϋπόθεση τεκμηρίωση για Swift.
Υπάρχουν πολλά APIs που είναι διαθέσιμες.
Και αυτό είναι μια καλή βάση για το σπίτι σας να αναζητήσουν, συγκεκριμένα πράγματα που μπορείτε
θέλετε να κάνετε με ένα API που αφορούν iOS.
Αν θέλετε να χρησιμοποιήσετε την κάμερα για παράδειγμα, μπορείτε να αρχίσετε να ψάχνετε εδώ,
και επίσης να χρησιμοποιούν το Google και στοίβα Υπερχείλιση, όπως θα κάνατε κανονικά.
>> Οποιεσδήποτε ερωτήσεις σχετικά με αυτό το πριν ξεκινήσετε αμέσως;
Εντάξει.
Ας προχωρήσουμε.
>> Έτσι, η πρώτη, έχω ένα αριθμός του παραδείγματος αρχείων.
Και Πάω να προσπαθήσω να εντείνει μέσα από αυτά σχετικά γρήγορα.
Αυτό είναι το Hello World αρχείο για Swift.
Είναι πολύ απλό.
Υπάρχει τρόπος περισσότερα σχόλια από τον υπάρχοντα κώδικα.
Παρατηρήστε την πραγματική κώδικας είναι σε το κάτω μέρος της γραμμής 14.
Λέει εκτύπωσης.
Και τότε είναι μια κλήση συνάρτησης.
Είμαστε περνώντας σε αυτό μια σειρά που ονομάζεται Γεια CS50.
Σημειώστε ότι δεν υπάρχει καμία ερωτηματικά.
Σημειώστε ότι δεν υπάρχει int main.
Υπάρχει κανένα από τα cruft που είχαμε με C.
Όταν χρησιμοποιούμε Swift με τον τρόπο αυτό, το οποίο είναι ακριβώς γραμμένο σε ένα αρχείο κειμένου
και αποθηκεύονται στον υπολογιστή μου, στη συνέχεια, Μπορώ να το υπολογίσουν και να το εκτελέσετε.
>> Παρατηρήστε ότι εδώ είμαι δεν χρησιμοποιούν το IDE CS50.
Αυτό προϋποθέτει ότι είμαι εκτελείται και ότι είμαι σε OS X,
και ότι έχω ήδη εγκαταστήσει το Xcode σε αυτό το μηχάνημα, προκειμένου αυτό
να λειτουργήσει πραγματικά.
Αλλά αυτό είναι μόνο ένα κανονικό αρχείο κειμένου ότι μπορούμε στη συνέχεια να καταρτίσει και να επεξεργαστείτε.
Ας δούμε πώς αυτό λειτουργεί πραγματικά.
Τι γίνεται αν θέλω να το υπολογίσουν;
swiftc 1.swift.
Μετά από μια στιγμή ή δύο, το θα δούμε ότι έχουμε τώρα
καταρτίζονται αυτό σε ένα αρχείο που ονομάζεται 1.
Και τώρα έχουμε τυπωμένο CS50 μας, εφαρμογή μας Hello World όχι.
>> Ανακοίνωση ένα άλλο πράγμα που καλά είναι ότι από προεπιλογή,
δεν είχαμε στην είσοδο A / N για να εκτυπώσετε μια νέα γραμμή.
Από προεπιλογή, η λειτουργία εκτύπωσης σε Swift θα εκτυπώσει μια νέα γραμμή για σας.
Μπορείτε να περάσετε μια προαιρετική πρόσθετη παράμετρος για να το πω να μην το πράξουν.
Όμως, το Google για περισσότερες πληροφορίες σχετικά με αυτό.
Από προεπιλογή, αυτό θα κάνει τη γραμμή εκτύπωσης.
>> Εντάξει, οπότε ας προχωρήσουμε στη συνέχεια σε κάποια άλλα πράγματα.
Λοιπόν, πώς μπορούμε να ορίσουμε μεταβλητές στην πραγματικότητα;
Μπορούμε να το κάνουμε αυτό είναι με τη χρήση μία από τις δύο μεθόδους.
Και αυτό που θέλω να σας πω πρώτο είναι ο ορισμός αυτός let.
Και αυτό είναι σημαντικό γιατί αποτελεσματικά
αυτό που κάνουμε είναι μια σταθερά που καθορίζει.
Θα δημιουργήσετε μια μεταβλητή, ή μάλλον ένα σταθερό όνομα που ονομάζεται,
παρέχει σε αυτό μερικές data-- σε Στην περίπτωση αυτή, η σειρά Νταν.
Αλλά με τη χρήση αυτής της let λέξη-κλειδί, λέμε
ότι αυτό variable-- ή και πάλι constant-- ονομάζεται
όνομα δεν πρόκειται ποτέ να αλλάξει.
Είναι πρόκειται να είναι αμετάβλητη καθ 'όλη η διάρκεια του προγράμματος
ή καθ 'όλη τη διάρκεια του πλαισίου
ότι η μεταβλητή είναι διαθέσιμη.
>> Αυτό είναι πολύ σημαντικό ότι όταν έχετε κάποια στοιχεία που δεν είναι
πρόκειται να αλλάξει στο πρόγραμμά σας, και θα δείτε μια ποικιλία παραδειγμάτων
περίπου, όταν θέλουμε να χρησιμοποιήσουμε ας σε σχέση με την άλλη σύνταξη,
Είναι σημαντικό να χρησιμοποιείτε ας όπου αυτό είναι δυνατόν, επειδή αυτή ενημερώνει το
η γλώσσα που είναι δεν πρόκειται να αλλάξει,
και μπορεί στην πραγματικότητα να εκτελέσει πολλές βελτιστοποιήσεις
για τη βελτίωση της ταχύτητας και της η ασφάλεια του προγράμματός σας.
Και με την ασφάλεια, εννοώ όχι ας το δυστύχημα με τρελό λάθη
ότι θα μπορούσαμε να συνηθίσει να βλέπουμε σε C.
>> Στη συνέχεια, μπορούμε να χρησιμοποιήσουμε κλωστή παρεμβολή να ενσωματώσουν αυτό μέσα σε ένα string.
Έτσι μπορούμε να δούμε σε αυτό το γραμμή εκτύπωσης, εκτύπωση Γεια σας,
και στη συνέχεια, χρησιμοποιώντας ανάστροφη κάθετο ανοιχτό parens, και στη συνέχεια το όνομα μεταβλητής μου,
στην περίπτωση αυτή σταθερή, κλείστε τις παρενθέσεις.
Είμαι ουσιαστικά τότε βάζοντας το περιεχόμενα αυτής της μεταβλητής που ονομάζεται όνομα
εντός της σειράς και, στη συνέχεια, εκτύπωση υπάρχει το αποτέλεσμα.
>> Υπάρχει άλλη μια αλλαγή σε αυτό το αρχείο η οποία είναι ότι έχω, στην κορυφή,
βάλει σε μια γραμμή δουλεία, η οποία ουσιαστικά καθορίζει μόνο
ότι θέλω να χρησιμοποιήσω το Swift διερμηνέα, ο οποίος
σημαίνει ότι δεν έχω πλέον να κατάρτιση αυτού του συγκεκριμένου προγράμματος.
Μπορώ να τρέξει ακριβώς σαν τη δική της γραφή.
Αλλά αυτό είναι, στην περίπτωση αυτή, πίσω οι σκηνές που καταρτίζονται και, στη συνέχεια,
που τρέχει.
Είναι απλά αόρατο σε εμάς.
>> Εντάξει, ας προχωρήσουμε.
Έτσι, υπάρχει ένα κομμάτι της πονηριάς ότι ακριβώς συνέβη πριν.
Που σας έδειξα ότι μπορώ θα μπορούσε να ορίσει ένα σταθερό.
Και θα μπορούσα να παρέχουν ορισμένα στοιχεία για να το κάνουμε.
Αλλά στην περίπτωση αυτή, παρατηρούμε ότι δεν το έκανα στην πραγματικότητα να καθορίσετε τον τύπο των δεδομένων
αυτο ειναι.
Και αυτό γιατί η compiler, μπορεί Swift
συναχθεί το είδος των δεδομένων που βασίζεται μόνο σχετικά με τα δεδομένα που έβαλα σε αυτό.
Επειδή ξέρει ότι από την αξιολόγηση αυτή μεταβλητή ακριβώς εδώ, το δικαίωμα αυτό των δεδομένων
Εδώ, θα ξέρει ότι είναι ένα string.
Και έτσι αυτή η συνεχής όνομα είναι επομένως πρόκειται να είναι μια συμβολοσειρά, όπως καλά.
>> Αλλά μπορούμε επίσης να είναι ρητή σχετικά με τον τύπο που είναι
πρόκειται να χρησιμοποιήσει για σταθερές ή μεταβλητές
χρησιμοποιώντας την ακόλουθη σύνταξη instead-- ας String όνομα του παχέος εντέρου ισοδυναμεί
Dan, που στην προκειμένη περίπτωση σημαίνει ότι είμαστε πρόκειται να ορίσετε ένα σταθερό κάλεσε το όνομά του.
Είναι πρόκειται να είναι τύπου String.
Και η τιμή θα είναι ο Dan.
Τώρα το άλλο τρόπο που μπορούμε να δημιουργήσουμε variables--
και αυτά είναι ευμετάβλητος μεταβλητές, οι οποίες σημαίνει ότι είμαστε, στην πραγματικότητα, πρόκειται
να αλλάξουν το περιεχόμενό τους κάποια στιγμή στην διάρκεια του πλαισίου
ότι η μεταβλητή defined-- μας χρησιμοποιούν τη λέξη-κλειδί var αντί ας.
Αλλά και πάλι, από προεπιλογή, εκτός αν ξέρετε ότι θα πρέπει να χειριστούν αυτά τα δεδομένα,
προσπαθήστε να χρησιμοποιήσετε αφήσει για βελτιώσεις στην απόδοση.
>> Σε αυτήν την περίπτωση, μπορώ τότε προσδιορίζει το είδος των δεδομένων
ότι περιμένουμε να είναι στο εσωτερικό του Αυτή η νέα μεταβλητή που ονομάζεται ετικέτα.
Είναι πρόκειται να είναι ένα string.
Και θα πάμε να ενώσετε στη συνέχεια, δύο χορδές μαζί, το string Γεια σας,
και η σειρά που αντιπροσωπεύεται από το μεταβλητή, ή μάλλον το όνομα σταθεράς.
>> Έτσι, αυτό είναι ωραίο, διότι αυτό Είναι κάπως σαν PHP στο ότι εμείς
έχουν πολύ εύκολη συνένωση κορδόνι.
Δεν έχουμε την αυτόματη χρησιμοποιήσετε οποιοδήποτε είδος της διαχείρισης μνήμης
να αυξηθεί το μέγεθος και να κάνουμε κάθε είδους αστεία πράγματα εκεί.
Αυτό λειτουργεί όπως θα αναμένουν.
>> Εντάξει, οποιεσδήποτε ερωτήσεις σχετικά με αυτό;
>> Τώρα ο άλλος λόγος για τον οποίο χρειαζόμαστε έχετε τη δυνατότητα
να είναι σε θέση να προσδιορίσει τι είδος των μεταβλητών δεδομένων
είναι γιατί μερικές φορές δεν το κάνουμε Θέλετε να προετοιμαστεί μεταβλητές
με κάποια δεδομένα κατά τη σημείο ορισμού.
Έτσι, σε αυτή την περίπτωση, ας πούμε ότι θέλω να ξεκινήσω την εισαγωγή
ορισμένες ποιότητες σε ένα βιβλίο βαθμό.
Καλά ξέρω ότι ένας από τους μεταβλητές που θέλω να
πρόκειται να είναι ένα μεταβλητό βαθμό.
Και γνωρίζουμε επίσης ότι εμείς θέλω να είναι ένας ακέραιος.
Αλλά ίσως δεν το κάνουμε ακόμα έχουν αυτό το βαθμό διαθέσιμο.
>> Σε Swift, θα πρέπει να καθορίσει τον τύπο των δεδομένων
που σχετίζεται με ένα μεταβλητή ή σταθερή ας
πριν μπορείτε πραγματικά χρησιμοποιήσετε αυτήν τη μεταβλητή.
Επειδή είναι έντονα δακτυλογραφημένη, θα πρέπει να συνδέσει ένα είδος
με αυτές τις μεταβλητές.
>> Έτσι, σε αυτή την περίπτωση, αν δεν έχω σωστά αρχικοποιείται η πρώτη με κάποια αξία,
τότε θα πρέπει να πείτε ό, τι Swift Περιμένω το είδος των δεδομένων να είναι.
Και αυτό πρόκειται να παραμείνει το ίδιο είδος δεδομένων
σε όλη την ιστορία του εν λόγω προγράμματος.
>> Τώρα μπορείτε να μπείτε στον πειρασμό, το συντομότερο Έχω δημιουργήσει αυτή τη μεταβλητή Βαθμός
και ένα που παρέχονται ακέραιος αριθμός 100, τώρα αν μου
θέλουν να προσπαθήσουν να ενώσετε ένα string με αυτό το ακέραιο,
θα μπορούσαν να μπουν στον πειρασμό να εξακολουθούν να χρησιμοποιούν ο εν λόγω φορέας κορδόνι συνένωσης
όπως κάναμε μόλις πριν λίγες γραμμές.
Αλλά δυστυχώς, Αυτή η πραγματικότητα δεν θα
λειτουργήσει, επειδή είστε ουσιαστικά την εκτέλεση
μια λειτουργία σε δύο διαφορετικούς τύπους.
>> Τώρα αυτό είναι πολύ διαφορετικό από τα άλλα γλώσσες όπως η PHP που είναι πραγματικά
loosey goosey με το είδος τους τύπους.
Είναι ακριβώς όπως, ναι, ό, δεν με νοιάζει.
Απλά να μου δώσει έναν τύπο, και ίσως θα κάνω το σωστό.
>> Σε αυτή την περίπτωση, το Swift είναι εξαιρετικά αυστηρές για τους τύπους
ότι έχουμε να κάνουμε με.
Ο εν λόγω φορέας άθροισμα ή τελεστής συνένωσης
έχει ουσιαστικά ένα ζευγάρι των διάφορες πιθανές εναλλακτικές λύσεις.
Μπορείτε να κάνετε άθροισμα με ακέραιους αριθμούς, ή να σας
μπορεί να κάνει εγχόρδων συνένωσης, και ίσως κάποια άλλα πράγματα επίσης.
Αλλά αν ο εν λόγω φορέας δεν αναγνωρίζει ό, τι είναι σε κάθε πλευρά του,
ή μάλλον το συνδυασμό αυτών δύο τύπων, δεν είναι αυτό που περιμένουμε είναι,
τότε πρόκειται να προκαλέσει την αποτυχία.
>> Έτσι, σε αυτή την περίπτωση, τι σημαίνει αυτό να έχουν μια σειρά συν έναν ακέραιο;
Λοιπόν, στο πλαίσιο της αυτό, μάλλον θα θέλετε
να κάνει μια πράξη συνένωσης κορδόνι.
Αλλά φυσικά ο υπολογιστής δεν έχει αυτό το είδος του περιβάλλοντος.
Και γι 'αυτό πρέπει να παρέχει ότι οι πρόσθετες πληροφορίες
να το αφήσει να ξέρετε τι είναι ότι θέλουμε να κάνουμε.
>> Έτσι, με άλλα λόγια, το γεγονός ότι Swift είναι έντονα δακτυλογραφημένη
σημαίνει ότι πρέπει να κάνουμε λίγη πρόσθετη εργασία
για να το πάρει για να λειτουργήσει η τον τρόπο που θα θέλατε.
Αλλά, ως αποτέλεσμα, είναι ασφαλέστερο.
Και αφού έχετε λάβει υπόψη αυτούς τους τύπους,
τα πράγματα απλά ειλικρινά ξεκινήσει να λειτουργήσει αρκετά καλά.
>> Έτσι, σε αυτή την περίπτωση, θα ήμασταν εκτελέσει αλληλουχία συμβολοσειρών
με τη ρητή χύτευση ο ακέραιος σε μια σειρά
τυλίγοντάς το σε αυτό το πρωτεύουσα λειτουργία S String,
και στη συνέχεια, χρησιμοποιώντας τη συνένωση εγχόρδων χειριστή να τροποποιήσει μεταβλητή ετικέτας μας,
και στη συνέχεια να εκτυπώσετε.
>> Μέχρι εδώ καλά?
Εντάξει, ας προχωρήσουμε.
>> Τώρα υπάρχει μια ποικιλία από στοιχεία τύποι που μπορούμε να χρησιμοποιήσουμε σε Swift.
Όπως έχετε συνηθίσει, μπορούμε να δημιουργήσουμε μια συστοιχία ευμετάβλητος.
Και αυτό μπορεί μόνο συστοιχία περιέχουν ένα μόνο είδος.
>> Έτσι, σε αυτή την περίπτωση, θα πάμε να δημιουργήσουμε ένα μεταβλητό συστοιχίες των ακέραιων αριθμών, η οποία
θα καλέσει τους βαθμούς, και θα είμαστε σε θέση για να αποθηκεύσετε ότι σε αυτή την αγκύλη
μορφή, όπως έχετε συνηθίσει σε σε μια ποικιλία από άλλες γλώσσες.
Αλλά παρατηρώ ότι εδώ είμαστε ορισμό μερικά πράγματα.
βαθμοί είναι ευμετάβλητος variable-- που δεν χρησιμοποιούν τη λέξη-κλειδί let.
Έτσι αυτό σημαίνει ότι μπορούμε στη συνέχεια να τροποποιήσετε τα περιεχόμενα αυτής της συστοιχίας.
Είναι τύπου Array Int, και μπορούμε να πούμε ότι
με βάση αυτές τις αγκύλες εδώ.
>> Τώρα, ένα από τα ωραία πράγματα γι 'αυτό είναι ότι εμείς
να έχουν πρόσβαση σε πολλές Επιπλέον πληροφορίες
σχετικά με τη σειρά απλά χρησιμοποιώντας μερικές απλές συμβολισμό με την τελεία.
Έτσι, για παράδειγμα, grades.count παρέχει σε μας
ο αριθμός των αντικειμένων που υπάρχουν σε ότι συστοιχία, η οποία θα μπορεί να έχει πρόσβαση αρκετά
εύκολα χρησιμοποιώντας απλά ότι συμβολισμό με την τελεία.
>> Αν θέλετε να προσθέσετε επιπλέον αντικείμενο σε αυτή την σειρά,
δεν μπορείτε να κάνετε το στυλ PHP όπου μπορείτε απλά ορίζουν ρητά,
σε μια δεδομένη δείκτη, κάποια αξία ότι θέλετε να εισαγάγετε.
Αντ 'αυτού, χρησιμοποιήστε το προσάρτησης μέθοδος στον τύπο συστοιχίας
να προσθέσετε αυτό το στοιχείο, 95, σε αυτή τη λίστα.
>> Έτσι τώρα που ο πίνακας αυτός έχει την ακόλουθη contents-- 100, 0, 90, 85.
Και τώρα έχουμε συνημμένων 95 με αυτό, καθώς και.
>> Υπάρχουν και άλλοι τρόποι μπορούμε να προσαρτήσει τα πράγματα.
Μπορείτε πραγματικά να χρησιμοποιήσετε ένα συντελεστή άθροισης,
η οποία θα πρέπει να ερμηνευθεί ως μια συστοιχία λειτουργία προσάρτησης.
Και τότε μπορείτε να προσθέσετε ένα άλλο σειρά, το περιεχόμενο των οποίων είναι 70 και 80,
στην εν λόγω συστοιχία.
Έτσι τώρα έχουμε το περιεχόμενο σε αυτή τη μεταβλητή
grades-- 100, 0, 90, 85, 95, 70, και 80.
Αυτό είναι απλά ένα ωραίο μικρό συντακτική ζάχαρη που Swift παρέχει για εμάς.
>> Έτσι, αν θέλουμε να συνοψίσουμε η βαθμούς, είμαστε ίσως
πρόκειται να θέλουν να επαναλάβει πάνω από κάθε στοιχείο σε αυτό το βρόχο.
Και έχουμε, σε Swift, η έννοια ενός βρόχου for, όπως θα περίμενε κανείς.
Αλλά ο τρόπος που υποδεικνύουν μια σειρά είναι ελαφρώς διαφορετική.
Έτσι, στην περίπτωση αυτή, να Συνοψίζοντας τα πάντα, θα
πρόκειται να δημιουργήσει ένα προσωρινό μεταβλητή που ονομάζεται άθροισμα προκειμένου για εμάς
να διατηρηθεί αυτή η καταμέτρηση.
>> Και να παρατηρήσετε για μας κατασκευή βρόχου εδώ.
Για το δείκτη σε 0 .. <grade.count.
Έτσι, αυτή η κατασκευή, 0 .. <grades.count είναι ένα εύρος λειτουργίας όπου είμαστε
λέγοντας ότι πρόκειται να δημιουργήσουν μια σειρά από ακέραιοι από 0 έως
με εξαίρεση όμως grades.count.
Έτσι, αυτό θα είναι 0, 1, 2, 3, 4, 5, μέχρι όμως πολλά το ένα
πριν grades.count.
>> Έτσι, αυτό είναι διαφορετικό από το πώς θα θα χρησιμοποιούνται συνήθως για βρόχους
όπου θα έχουν κάποιο δείκτη μεταβλητή, ίση με μηδέν ορίζεται κατά την πρώτη,
και στη συνέχεια να ενσωματώσει ότι μέχρι κάποια τιμή μικρότερη από την καταμέτρηση των αντικειμένων
στην εν λόγω συστοιχία.
>> Έτσι, υπάρχει μια τροποποίηση σε αυτό, στην πραγματικότητα,
η οποία μας επιτρέπει να πολύ εύκολα ορίσετε διαφορετικούς τύπους περιοχών.
Εάν αλλάξετε το εύρος αυτό να τρεις τελείες, 0 ... grade.count,
αυτό αντιπροσωπεύει το εύρος 0 να grades.count χωρίς αποκλεισμούς,
πράγμα που σημαίνει ότι ο αριθμός αυτός είναι επίσης Στη συνέχεια περιλαμβάνονται σε αυτή την περιοχή.
>> Αλλά αυτό είναι πολύ βολικό για αυτές ακριβώς τα πράγματα,
όταν έχουμε να εκτελεί επαναλήψεις πάνω βρόχου
επειδή οι εν λόγω δείκτες είναι μηδέν ευρετήριο, όπως έχουμε δει σε άλλες γλώσσες
επισης.
Οποιεσδήποτε ερωτήσεις σχετικά με αυτό για βρόχο;
>> Έτσι υπάρχει έμμεσο ορισμό αυτής της μεταβλητής δείκτη,
αξία των οποίων αρχίζει στις 0, και συνεχίζεται σε κάθε επανάληψη βρόχου
να αυξηθεί κατά 1 μέχρι ενός σημείου ότι είναι ίσο με grades.count,
σε ποιο σημείο, ο βρόχος ματαιώνεται.
>> Παρατηρήστε ότι στο κορδόνι μας Παρεμβολή εδώ,
μπορούμε πραγματικά να εκτελέσετε ορισμένες απλές χειρισμούς σε αυτές τις αξίες.
Έτσι, ο δείκτης συν 1 θα είναι πράγματι εκτελέσει ένα άθροισμα της αξίας
επειδή ο δείκτης είναι, σε Στην περίπτωση αυτή, ένας ακέραιος.
Και σε αυτό το σημείο, θα στη συνέχεια να μετατρέπεται σε μία στοιχειοσειρά
και παρεμβολής σε αυτήν την συμβολοσειρά εδώ, και να εκτυπωθούν, όπως θα περίμενε κανείς. .
>> Και το ωραίο σχετικά με τις συστοιχίες είναι εδώ
ότι είμαστε επίσης σε θέση να έχουν γοητευτικός αξίες και τιμές ρύθμισης
χρησιμοποιώντας την αγκύλη σημειογραφία ως έχουμε δει σε άλλες γλώσσες, καθώς και.
>> Εντάξει, έτσι ώστε από εδώ, τώρα υπολογίζουν άθροισμα όλων μας των βαθμών μας.
Τώρα είδος της επόμενης λογικό βήμα θα ήταν
να κάνει μια πράξη της διαίρεσης να βρείτε από τον μέσο όρο των κατηγοριών αυτών.
Αλλά κάτι σημαντικό Εδώ συμβαίνει το οποίο
είναι ότι το ποσό αυτό είναι ίσως ένας ακέραιος.
Αλλά πρέπει να εκτελούν ορισμένα είδος της διπλής διαίρεσης.
Και αυτό πρόκειται να είναι εξαιρετικά σημαντικό όταν
θέλουμε να εκτελέσετε αυτή τη λειτουργία, διότι αυτό που λέμε
είναι ότι πρέπει πραγματικά να εκτελεί διαίρεση σε δύο διπλά.
Και πάλι, επειδή Swift είναι πολύ έντονα δακτυλογραφημένη,
πρέπει να οριστεί ρητά όλα τα στοιχεία για διπλά προτού πραγματικά
εκτέλεσης αυτής της λειτουργίας.
>> Έτσι, για να μπορέσουμε να εκτελούν διπλή διαίρεση,
δεν είναι επαρκής για ένα μόνο των ειδών αυτών είναι διπλός.
Και τα δύο πρέπει να είναι ένα διπλά για τη λήψη άμεσων
να είστε σίγουροι ότι αυτό το είναι ό, τι θέλουμε να κάνουμε.
Γι 'αυτό και στη συνέχεια θα typecast ρητά το ποσό που έχουμε υπολογίζονται πάνω
και ο αριθμός των βαθμών σε δίκλινα, και στη συνέχεια, εκτελέστε αυτή τη λειτουργία και την αποθήκευση
ότι σε αυτή τη νέα μεταβλητή, ή μάλλον Αυτή η νέα σταθερή ονομάζεται μέσο όρο,
η οποία θα έχει τι είδους, να το φανταστείτε;
Διπλό, ναι.
Έτσι, σε αυτή την περίπτωση, θα Δεν πρέπει να το καθορίσετε
επειδή μπορεί να συναχθεί από το λειτουργία τον τύπο του μέσου όρου των δεδομένων
θα είναι.
Και Swift είναι γενικά αρκετά καλή για να είναι σε θέση να συμπεράνει τους τύπους.
>> Θέλετε να δείτε αυτό το τρέχουν, ή μπορώ να προχωρήσω;
Θέλω να συνεχίσω.
Οποιεσδήποτε ερωτήσεις σχετικά με όλα αυτά;
Εξαιρετική.
>> Τώρα θα πάμε να αρχίσουν να φτάσετε στο οι καλές stuff-- λειτουργίες που καθορίζει,
και ένα ζευγάρι των άλλων τύπων που είναι μοναδική για Swift που δεν έχετε
δει σε άλλες γλώσσες μέχρι αυτό το σημείο,
αλλά είναι παρούσες σε άλλες γλώσσες που μπορείτε να βρείτε αργότερα.
Έτσι, πρώτα αν θέλετε να ορίσουμε μια συνάρτηση,
μπορείτε να ορίσετε με το funky λέξη λειτουργία, και στη συνέχεια το όνομα της συνάρτησης,
και στη συνέχεια σε παρενθέσεις, τα επιχειρήματα ότι θέλετε αυτή η λειτουργία να αποδεχθεί.
Τα επιχειρήματα αυτά πρέπει επίσης να specify-- generally--
Πρέπει επίσης να προσδιορίζει το είδος των δεδομένων που είναι, εκτός αν μπορεί να συναχθεί.
Και θα δούμε ότι λίγο προειδοποίηση σε μόλις ένα μικρό κομμάτι.
>> Έτσι, σε αυτή την περίπτωση έχουμε ένα λειτουργία που ονομάζεται printGradeCount.
Εμείς πάμε για να δεχτεί μια variable-- ή μάλλον σε αυτήν την περίπτωση,
α constant-- ονομάζεται Βαθμολόγιο.
Και αυτό πρόκειται να είναι της Τύπος πίνακα ακεραίων.
Τώρα υπάρχει κάτι αυτό είναι πραγματικά σημαντικό εδώ
ότι θέλω να καταλάβετε.
Αυτό είναι ότι από προεπιλογή, αυτά τα επιχειρήματα που είναι οι συντελεστές αυτής της λειτουργίας είναι
ορίζεται με μια σιωπηρή λέξη let, πράγμα που σημαίνει ότι δεν μπορώ να τροποποιήσει αυτό
Βαθμολόγιο μεταβλητή εδώ.
Και αυτό το είδος της νόημα, επειδή είστε το πέρασμα των δεδομένων σε.
Και ίσως δεν το θέλουν να αλλάξει από κάτω σας.
Είναι δυνατόν να αναφέρεται ρητώς ότι αυτό είναι μια μεταβλητή με την τοποθέτηση
η λέξη-κλειδί var εδώ.
Αλλά αυτό είναι μια gotcha που έχουμε Παρατήρησα άνθρωποι έχουν γίνει στο παρελθόν
είναι ότι υποτίθεται ότι πρόκειται να είναι μια μεταβλητή όταν, στην πραγματικότητα,
είναι μια σταθερά.
>> Εντάξει, έτσι και εδώ, στη συνέχεια, στην περίπτωση αυτή, εμείς δεν προσδιορίζουν κάποιο είδος επιστροφής.
Θα σας δείξουμε πώς να το κάνουμε ότι ακριβώς σε μια στιγμή.
Να σημειωθεί όμως ότι εδώ έχουμε μόνο ένα απλό αν η κατάσταση.
Αν βαθμολόγιο είναι άδειο, η οποία σε αυτή την περίπτωση
είναι ακριβώς η ιδιότητα αυτού του ακεραίου σειρά, τότε θα εκτυπώσετε κάτι.
Διαφορετικά κάνουμε κάτι άλλο.
>> Αρκετά απλή μέχρι στιγμής νομίζω.
Αλλά να με σταματήσει, εάν έχετε οποιεσδήποτε ερωτήσεις.
>> Τώρα αυτή η λειτουργία, κατά μέσο όρο, λαμβάνει επίσης ορισμένα επιχειρήματα, ή μάλλον ένα επιχείρημα,
το οποίο είναι το βαθμολόγιο, και αυτή τη φορά πρόκειται να επιστρέψει ένα διπλό τύπο.
Επειδή είναι υπολογιστών το μέσο όρο και είναι
πρόκειται να επιστρέψει στην πραγματικότητα ότι υπολογισμένες κατά μέσο όρο στο καλούσας γραμμής.
>> Σε αυτή την περίπτωση, εμείς καθορίζουμε το Τύπος επιστρέψει μετά από ένα βέλος.
Και αυτό μπορεί να αισθάνονται είδος περίεργο στην αρχή.
Έχετε συνηθίσει για τον καθορισμό της επιστροφής
πληκτρολογήστε πριν από το όνομα της συνάρτησης.
Αλλά αν νομίζετε ότι αυτό από την άποψη των μαθηματικών,
όπως όταν έχετε τα μαθηματικά ότι ορίζουμε μια συνάρτηση,
έχετε μια συνάρτηση με κάποια εισόδους και παράγει μία έξοδο.
Και αυτό είναι ακριβώς ό, τι αυτό υποτίθεται ότι μιμούνται.
Και υπάρχει μια-δυο άλλες γλώσσες ότι έχουν παρόμοια σύνταξη, καθώς,
αλλά μάλλον κανένας ότι έχετε δει σε CS50.
Αλλά και πάλι δεν πρέπει να συγχέεται με αυτό.
Το βέλος σημαίνει ότι ό, τι συμβαίνει να επιστρέψει σε αυτή την περίπτωση.
Εντάξει, έτσι πώς θα πάμε για τον υπολογισμό αυτού του μέσου όρου;
Λοιπόν, αν το βαθμολόγιο Είναι άδειο, αλλά τότε είμαστε
πρόκειται να επιστρέψει 0, το οποίο ίσως ένας λογικός τρόπος για να αντιμετωπίσει αυτό.
Δεν ξέρω, ας έρθει πίσω σε αυτό σε λίγο.
Αυτό δεν μπορεί στην πραγματικότητα να είναι ένας λογικός τρόπος
να υπολογίσει κατά μέσο όρο, αν έχουμε ένα άδειο Βαθμολόγιο.
>> Στη συνέχεια, θα εκτελέσει ακριβώς άθροιση μας.
Παρατηρήστε ότι εδώ έχουμε πραγματικά έχουν μια εναλλακτική εκδοχή ενός
για το βρόχο, η οποία μας επιτρέπει να επαναλάβει πάνω από κάθε στοιχείο ενός συνόλου
και τοποθετήστε κάθε στοιχείο στη δική μεταβλητή της.
Με τον καθορισμό του βαθμού στον βαθμολόγιο, αυτό που λέμε
είναι ότι θα πάμε να σιωπηρά δημιουργήσετε ένα νέο σταθερό ονομάζεται
βαθμού που πρόκειται να αντιπροσωπεύσει Κάθε μοναδικό στοιχείο στο βαθμολόγιο
κάθε φορά που το βρόχο for εκτελεί επαναλήψεις.
Έτσι, η πρώτη φορά που αυτό είναι τρέξει, θα Βαθμός
είναι το πρώτο στοιχείο στο βαθμολόγιο.
Η δεύτερη φορά θα είναι η δεύτερο στοιχείο, έτσι καθεξής και ούτω καθεξής
μέχρι Βαθμολόγιο έχει εξαντλήσει στοιχείων.
Τότε θα είμαστε σε θέση να συνοψίσω ότι βαθμού σε μεταβλητή άθροισμα μας
και να επιστρέψει μέση μας όπως έχουμε δει στο παρελθόν.
Εντάξει, οποιεσδήποτε ερωτήσεις;
Ναί?
Κοινό: Έχω δύο ερωτήσεις.
Νούμερο ένα, υποθετικά, μπορεί να τρέχετε ακέραιο σε αυτό το σημείο;
Δεν χρειάζεται να είναι ένα διπλά, είναι ότι η σωστή;
DAN AMRMENDARIZ: Μπορείτε να επαναλάβετε αυτή την ερώτηση;
Κοινό: Μπορώ να κάνω ακέραιος ως ο μέσος όρος;
DAN AMRMENDARIZ: Μπορείτε να κάνει ακέραιος ως ο μέσος όρος;
Έτσι επιστρέφουν έναν ακέραιο μέσο όρο αντί για ένα διπλό;
>> Κοινό: Σας Return-- έχουν αυτό το δικαίωμα τώρα παρακάτω.
DAN AMRMENDARIZ: Ακριβώς εδώ, επιστρέψτε 0.0;
Κοινό: Ναι, μόλις επιστρέψει 0.
Έτσι, θα είναι είτε 80 ή 85, αλλά όχι 85.2.
>> DAN AMRMENDARIZ: Έτσι, στην περίπτωση αυτή, έτσι υπάρχει ένα ζευγάρι διαφορετικούς τρόπους
για να απαντήσετε σε αυτό.
Επιτρέψτε μου να τις απαντήσω με τη σειρά.
Έτσι, αν κάνω μόνο αυτό το κέρδος 0, μια 0 είναι ένας ακέραιος αριθμός.
Και έτσι ώστε θα προκαλέσει Σφάλμα τύπου για την περίπτωση αυτή
επειδή αναμένει ένα διπλό αλλά στη συνέχεια επιστρέφει έναν ακέραιο.
Αν θέλω να επιστρέφουν έναν ακέραιο, μπορώ.
Μπορώ να ορίσετε τον τύπο επιστροφής σε int, επιστρέφει 0 εδώ,
και να μην εκτελέσει διπλή διαίρεση.
Αλλά τότε θα είμαστε κάνει διαίρεσης.
Και γι 'αυτό τότε δεν θα πάρει το κατά μέσο όρο ότι θα ίσως περιμένατε.
Αλλά ναι, μπορούμε να τροποποιήσουμε οι τύποι με αυτόν τον τρόπο.
>> Κοινό: Και δεύτερον, θα έχει το ένα διπλό στην κορυφή.
Αλλά κάτω από, όταν κάνει την επιστροφή Διπλό,
ότι είναι ήδη αυτόματα επιστροφή Διπλό μορφή.
Γιατί θα πρέπει ακόμα να την ορίσουμε με το βέλος στην κορυφή με ένα διπλό;
>> DAN AMRMENDARIZ: Λοιπόν σε περίπτωση, αυτό είναι μέρος
της the-- ώστε να επαναλάβει την ερώτηση, επειδή είναι σιωπηρή από την επιστροφή
τύπους εδώ, το είδος αυτό στην πραγματικότητα είναι, πρέπει να είμαστε σαφείς με Swift
σχετικά με το τι θέλουμε να επιστρέφουν από αυτή την λειτουργία
έτσι ώστε όταν εκτελεί Τύπος τον έλεγχο, μπορεί να βεβαιωθείτε
ότι αυτό που έχουμε στην πραγματικότητα γραμμένο κάτω από συμμορφώνεται πραγματικά με αυτό.
Έτσι είναι το είδος του σαν επιταγή με τον εαυτό σας το είδος της κατάστασης.
Αλλά υπάρχει are--
>> Κοινό: [δεν ακούγεται] arrow;
>> DAN AMRMENDARIZ: Υπάρχουν περιπτώσεις, όταν μπορούμε να καθορίσουμε ότι μπορούμε σιωπηρά
ορίσετε τον τύπο επιστροφής.
Αλλά σε αυτή την περίπτωση, δεν το κάνω Πιστεύω ότι θα μπορούσε να λειτουργήσει.
Υπάρχει κάποια άλλη σύνταξη ότι θα δούμε αργότερα.
>> Εντάξει, έτσι ώστε αυτή η πηγή κώδικας είναι λίγο διαφορετικό
διότι αυτό αναλύει τα επιχειρήματα από η λειτουργία που μας καλείς.
Επιτρέψτε μου να σας δείξει πώς λειτουργεί πριν προχωρήσουμε στην πραγματικότητα
σε ορισμένα ενδιαφέροντα πράγματα ότι συμβαίνει στο Swift.
>> Έτσι, σε αυτή την περίπτωση, αν τρέχω μόνο αυτό κώδικα, παρατηρούμε ότι αυτό που κάνει
is-- ενώ, το είδος του Μου δίνει ένα περίεργο σφάλμα.
Θα πρέπει να περάσει ένα ζευγάρι των ακέραιοι ως όρισμα γραμμής εντολών.
Ας δούμε λοιπόν, 150 και 80, και πατήστε enter για να μάθετε τι είναι πραγματικά κάνει.
Είναι αποδοχή κάθε μία από Οι τιμές αυτές καθώς ακέραιοι.
Είναι αυτά εισαγωγή σε ένα Βαθμολόγιο.
Και τότε είναι που εκτελεί ότι η μέση υπολογισμό
και την έξοδο που όπως θα περιμέναμε.
>> Αλλά προφανώς υπάρχει κάτι που συμβαίνει σχετικά με την απόρριψη αυτή κάτι
κάτι σαν ακέραιος.
Όπως ίσως θυμάστε από όταν ήμασταν που ασχολούνται με επιχειρήματα της γραμμής εντολών
σε C και σε άλλες γλώσσες, η πρώτη 0-ου στοιχείο σε αυτό το επιχείρημα της γραμμής εντολών
λίστα είναι το όνομα της εντολής ότι πράγματι εκτελεστεί.
Έτσι, σε αυτή την περίπτωση, είμαι απλώς looping πάνω από όλα τα επιχειρήματα της γραμμής εντολών.
Αλλά εγώ δεν κάνω οποιοδήποτε είδος της φαντασίας ελέγξτε για να προσπεράσει τη πρώτη.
Είμαι απλά ρητά ή σιωπηρά είμαι τον έλεγχο της οποίας αυτών των τύπων
είναι ακέραιοι πριν εγώ πραγματικά εκτελέσει ο υπολογισμός αυτός.
>> Και αυτό είναι, κατ 'ουσίαν τι συμβαίνει εδώ.
Για κάθε επιχείρημα τα επιχειρήματα της διαδικασίας του,
Πάω να εκτελέσει κάποια επιταγή.
Και σε αυτή την περίπτωση, θα πάω να προσπαθήσει να μετατρέψει πρώτα
το επιχείρημα αυτό σε έναν ακέραιο αριθμό από εκτελεί μια ρητή typecast,
γιατί είναι, στην είσοδο, ένα string και όχι στην πραγματικότητα ένας ακέραιος.
>> Αλλά αυτό είναι το είδος της μια περίεργη σύνταξη, αν αφήσουμε βαθμού ισούται Int (επιχείρημα).
Τι συμβαίνει στην πραγματικότητα εδώ είναι εξαιρετικά
σημαντικό να χρησιμοποιείτε Swift σας.
Αυτό χρησιμοποιεί ό, τι είναι ονομάζεται ένα προαιρετικό τύπου.
>> Έτσι, αυτή η λειτουργία, Int (επιχείρημα), επιστρέφει όχι μόνο έναν ακέραιο, αλλά επιστρέφει
αυτό που ονομάζεται μια προαιρετική ακέραιο.
Και έτσι αυτό είναι το είδος του ένας τύπος στην κορυφή ενός τύπου.
Μπορείτε να ταξινομήσετε από το φανταστείτε σαν αυτό είναι που επιστρέφουν σαν ένα πακέτο.
Και όταν ανοίγετε ότι συσκευασίας, είτε
έχει ένα ακέραιο, η οποία είναι το αποτέλεσμα, ή δεν έχει απολύτως τίποτα σε αυτό καθόλου.
Και αυτό είναι χρήσιμο ως έλεγχο σφαλμάτων μηχανισμός, διότι στην περίπτωση αυτή
μπορούμε να ανακαλύψουμε, ήταν αυτό μετατροπή επιτυχημένο είδος;
Αν ήταν, τότε είναι στην πραγματικότητα πρόκειται να έχουν έναν ακέραιο στο εσωτερικό.
Διαφορετικά πρόκειται να έχουν κάποια αξία που θα καλέσουμε μηδέν, η οποία
είναι αντιπροσωπευτική καμία ακέραιος καθόλου.
Είναι πραγματικά εκπρόσωπος του τίποτα.
>> Και έτσι αυτό εάν ο τρόπος κατασκευής μας επιτρέπει να ξεδιπλώνω αυτό το πακέτο,
ότι οι εναλλακτικές δυνατότητες σύνδεσης.
Και αν είμαστε σε θέση να ξεδιπλώνω ότι συσκευάζουν και να βρει έναν ακέραιο στο εσωτερικό,
τότε αυτό που λέμε εδώ είναι ότι στη συνέχεια θα
επιτρέπουν η αξία αυτή να θέσει σε Αυτή η συνεχής ονομάζεται βαθμού.
Και αυτό το τμήμα της εντολής if, το άνω τμήμα της εντολής if
θα τρέξει, γιατί αυτό ξετυλίξετε ήταν επιτυχής.
>> Εάν είναι ακριβώς έτσι συμβαίνει ότι υπήρξε ένα λάθος, ίσως
σε αυτό το ρητό μετατροπής τύπου από μια σειρά σε ακέραιο, ίσως
είναι η τιμή του ABC για παράδειγμα.
Και αυτό είναι στην πραγματικότητα δεν πρόκειται για τη μετατροπή σε ακέραιο.
Στη συνέχεια θα επιστρέψει μηδέν, η οποία δεν είναι ένας ακέραιος.
Και αυτή η δήλωση, αν και στη συνέχεια να αποτύχει.
βαθμός αυτός δεν θα υπάρχει γιατί δεν έχει περιεχόμενο ακέραιος.
Και θα τρέχει αυτό το μπλοκ άλλο αντ 'αυτού.
Ναί?
>> Κοινό: Μηδέν είναι Ν-Ι-L;
DAN AMRMENDARIZ: μηδέν είναι Ν-Ι-Ε, ναι.
>> Έτσι, αυτό είναι ίσως ένα από τα δυσκολότερα πράγματα για Swift,
ειδικά όταν είστε σε τα ζιζάνια σε μια iOS app
και είστε πραγματικά προσπαθούν να κάνει κάποια εξέλιξη εκεί.
Είναι πρόκειται να φωνάζει σε σας για προαιρετικό.
Δεν πρόκειται να σας ζητήσει ερωτηματικά και θαυμαστικά.
Αλλά από τη στιγμή που θα καταλάβω αν out-- αφιερώσουν κάποιο χρόνο για την εξεύρεση
τι συμβαίνει με τους τύπους προαιρετικών, θα σώσει τον εαυτό σας πολύ πονοκέφαλο
καθώς προσπαθείτε να γράψει μια εφαρμογή στο Swift.
>> Είναι πραγματικά ένα πολύ ισχυρό χαρακτηριστικό.
Και θα πρέπει ακριβώς να πάρτε τη λέξη μου για αυτό προς το παρόν.
Αλλά θα δούμε αυτή την κατασκευή και κάποιοι άλλοι αρέσει
σε ορισμένα από τα άλλα τον πηγαίο κώδικα που θα σας δείξουμε ακριβώς σε ένα μικρό κομμάτι.
>> Υπάρχουν αρχικές ερωτήσεις εδώ;
Έτσι, το σημαντικό πακέτο είναι ότι ένα προαιρετικά τύπος είναι ένα είδος metatype.
Είναι είτε έχει μια τιμή, και αν ναι, τότε
Θα έχετε ίσως την αξία αυτή συνδέεται με αυτό, ή δεν έχει καμία απολύτως αξία,
και εκπροσωπείται από το μηδέν.
Το υπόλοιπο αυτό είναι ίσως όπως θα περίμενε κανείς.
>> Ας ράμπα μέχρι το δυσκολία ακόμη φορά.
Και αυτή τη φορά, ας ρίξουμε μια ματιά σε μερικά άλλους τύπους δεδομένων που υπάρχουν πραγματικά.
Ένας από αυτούς είναι λεξικά, η οποία είναι πολύ παρόμοια με την Python λεξικά.
Είναι κάπως παρόμοιο με ένα πίνακα κατακερματισμού σε C. Είναι ουσιαστικά μια χαρτογράφηση των κλειδιών
όπου τα κλειδιά μπορεί να είναι χορδές.
Και όταν κοιτάζω προς τα πάνω τα κλειδιά, αυτά τα κλειδιά θα έχουν αξία.
Έτσι δεν είναι αρκετά μια σειρά, αλλά Αντ 'αυτού, πιο στενά συνδεδεμένες
σε ένα χάρτη κατακερματισμού ή ένα πίνακα κατακερματισμού.
>> Ας δούμε πώς αυτό υποτίθεται να εργάζονται πριν πραγματικότητα
πηγαίνετε στο ίδιο πηγαίο κώδικα.
Αν τρέχω μόνο αυτό, δεν συμβαίνει τίποτα πραγματικά.
Είναι μου λέει ότι Περιμένω ορισμένες παράμετροι του ακόλουθου τύπου.
Έτσι, Πάω να παρέχει στους ότι ορισμένοι πρόβλημα που τα ονόματα,
έτσι pset0, ίσως πήρα 100.
Και pset1, πήρα ένα 5.
Και στη συνέχεια για τις εξετάσεις, θα έκανε πολύ καλά και πήρε 30.
Και ουπς, χτύπησα ένα χώρο εδώ.
>> Όταν πατήσετε το Enter, μπορείτε να δείτε εκτελεί κάποια υπολογισμό.
Λέει Βαθμολόγιο είναι τρεις τάξεων, pset1, pset0, εξετάσεις.
Και βαθμολόγιο έχει αυτό το συγκεκριμένο μέσο.
Έτσι και πάλι, δουλεύουμε με αυτό το βαθμολόγιο ιδέα,
αλλά θα πάμε να συνεχίσουμε την επανάληψη με την πολυπλοκότητα της λειτουργίας μας.
>> Έτσι, κατά την έναρξη, είμαστε απλά πρόκειται να δημιουργήσει μια λειτουργία που
είναι υπεύθυνη για την εκτύπωση του χρήση.
Και υπάρχει αυτή η έξοδος λειτουργία η οποία θα είναι ακριβώς
βίαια τερματίσετε την εφαρμογή.
Αυτό δεν είναι κάτι που θα χρησιμοποιήσετε στο iOS app.
Αυτό είναι μόνο, στην περίπτωση αυτή, με το επιχείρημα της γραμμής εντολών.
Στη συνέχεια θα αρχίσει να κινείται προς την κατεύθυνση Xcode.
Αλλά αυτό είναι ειδικά για μια εντολή line πρόγραμμα στυλ σε Swift.
>> Ας ρίξουμε μια ματιά σε μερικά από τα τα ενδιαφέροντα πράγματα εδώ.
Ας δούμε, μόνο ένα ζευγάρι των ενδιαφέροντα πράγματα να αναφέρω ίσως
είναι ότι η λειτουργία μου εκτύπωση του αριθμού των βαθμών,
Θα θυμάστε ίσως ότι είχα τον εν λόγω κατάλογο της items-- pset1, pset0, και εξετάσεις.
Μπορείτε πραγματικά γρήγορα και εύκολα να το κάνετε αυτό
με τη λήψη του βαθμολόγιο, η οποία είναι μια λεξικό που έχει τα κλειδιά και αξίες.
Βρείτε όλα τα βασικά είναι μέσω η μέθοδος κλειδιά τελεία εδώ,
και στη συνέχεια να χρησιμοποιήσετε αυτό το joinWithSeparator, τα οποία στη συνέχεια θα λάβει όλα τα κλειδιά
ότι είχαμε πληκτρολογήσει, pset1-- ή Συγγνώμη, pset0, pset1, και exam--
και να τους ενώσετε μαζί χρησιμοποιώντας ένα κόμμα και ένα κενό διάστημα
για να δημιουργήσετε ένα μακρύ κορδόνι.
Αυτή η πράξη συνένωσης είναι μόνο φαινομενικά χρήσιμη σε μια ποικιλία από περιβάλλοντα.
Και έτσι είναι αυτό joinWithSeparator.
>> Και αυτό είναι ένα πράγμα που είναι αλλάξει από 1 έως Swift Swift 2.
Εκεί που χρησιμοποιούνται να είναι μια Python style-- αν είστε
εξοικειωμένοι με Python-- ένα Python στυλ ενταχθούν μέθοδο στις χορδές.
Αλλά αυτό δεν είναι πλέον στην περίπτωση του Swift 2.
Θέλετε να χρησιμοποιήσετε αυτό αν θέλετε για να ενώσετε μια σειρά από πράγματα
μαζί με μια σειρά.
>> Έτσι, ίσως τότε σε μας συζήτηση του μέσου όρου πριν,
κάνει λίγο περισσότερο νόημα για να θέσουμε το μέσο λειτουργίας
να είναι ένα προαιρετικό διπλό μάλλον από απλώς μια ρητή διπλό.
Επειδή είχαμε ότι ασυνήθιστη κατάσταση όπου,
Τι κι αν στην πραγματικότητα Βαθμολόγιο δεν έχει τιμές μέσα σε αυτό;
Τι θα πρέπει η μέση απόδοση;
>> Καλά ίσως σε C σας θα έχουμε κάνει κάτι
όπως προβλέπεται μια αξία δεικτών, όπως 0.0, ή ίσως ένας αρνητικός αριθμός,
ή απλά κάτι που εκπροσωπούν το γεγονός ότι υπήρχε κάποια κατάσταση σφάλματος
και ίσως δεν έχουν πραγματικά η δυνατότητα να υπολογίσει το μέσο όρο.
Λοιπόν η ομορφιά του προσδιορισμού προαιρετικού τύπου θα ήταν να το κάνουμε αυτό.
Και είμαι τώρα λένε όλα αυτά τα λόγια, αλλά Αυτή η πραγματικότητα δεν χρησιμοποιεί optionals.
Αλλά θα δούμε ότι σε μόλις λεπτά, όπου μπορούμε να καθορίσουμε κατά μέσο όρο
να είναι ένα προαιρετικό τύπο δεδομένων, έτσι ώστε αν επιστρέφει πράγματι κάποια δεδομένα, τότε
θα επιστρέψουμε τα δεδομένα.
Διαφορετικά, θα επιστρέψουμε μηδέν, λέγοντας ότι αυτή η
δεν έχει νόημα υπολογισμού.
>> Ας περάσουμε σε κάτι άλλο.
Έτσι, από εδώ, έχουμε κοιτούσατε Όλα αυτά τα παραδείγματα στη γραμμή εντολών.
Αλλά πραγματικά τι πρόκειται να ασχολούνται με είναι Xcode.
Και ένα από τα ωραία πράγματα για Xcode είναι, και συγκεκριμένα στην Swift,
είναι ότι έχουμε αυτό πράγμα που ονομάζεται μια χαρά.
Και μια χαρά είναι δεν είναι καθόλου μια iOS app.
Αλλά σας επιτρέπει να πειραματιστείτε με Swift με έναν πολύ εύκολο τρόπο.
Μπορείτε να πληκτρολογήσετε το σύνολο των κωδικό σας.
Είναι όμορφα Σύνταξη επισημανθεί εδώ.
Όταν δημιουργείτε ένα νέο αρχείο, θα ζητήσει σας εάν θέλετε να δημιουργήσετε μια χαρά.
Αλλά το ωραίο πράγμα σχετικά με την παιδική χαρά είναι ότι στα δεξιά του παραθύρου σας,
δεν θα σας δείξει πραγματικά εξόδου από τον κώδικά σας.
Έτσι, αν μετακινηθείτε προς τα κάτω, μπορούμε να δούμε τι η έξοδος από διάφορες γραμμές κώδικα
στην πραγματικότητα συμβαίνει να είναι.
>> Έτσι, σε αυτή την περίπτωση, θα πάμε να αλλάξετε τις κατευθύνσεις μόνο ένα μικρό κομμάτι
και να μιλήσουμε για κάτι που είναι πραγματικά σημαντικό σε αυτό το υψηλό επίπεδο τον τρόπο
ότι Swift λειτουργεί, και Είναι αυτή η ιδέα του κλεισίματος.
Και πιθανώς έχετε δει αυτό λίγο σε JavaScript.
Για όσους από εσάς είναι σε CS50, κλείσιμο
είναι πολύ δημοφιλή, πολύ καλός τρόπος για να γίνει υψηλό επίπεδο τα πράγματα στις σύγχρονες γλώσσες.
Αλλά είναι επίσης και το είδος του είναι δύσκολο να τυλίξτε το κεφάλι σας γύρω από την πρώτη φορά.
Έτσι, αν ψάχνετε σε αυτό για πρώτη φορά, ότι είναι εντάξει.
Αρκεί να δει κανείς τον πηγαίο κώδικα και να δούμε αν μπορείτε να το καταλάβω στο σπίτι.
>> Έτσι, σε αυτή την περίπτωση, ας πούμε ότι εμείς θέλετε να δημιουργήσετε ένα πολύ εκθετών
με κάποια σταθερή τιμή.
Έτσι, σε αυτή την περίπτωση μπορεί να δημιουργήσει μια λειτουργία.
Πάω να το ονομάσουμε εξουσία 2, των οποίων μοναδικός σκοπός της ζωής
είναι να πάρει κάποιο εισόδου και διπλό αυτό, και να επιστρέψει την τιμή αυτή.
Παρατηρήστε ότι εδώ είμαι αποδοχή ενός τύπου δεδομένων.
Είναι πρόκειται να είναι μια μεταβλητή που ονομάζεται Χ.
Είναι τύπου double.
Και Πάω να επιστρέψει ένα διπλό εδώ.
Και είμαι απλώς πρόκειται να κάνει ένα πολύ, ειλικρινά, αρκετά
αφελής τρόπος για διπλασιασμό της τιμής αυτής.
Και θα σας δείξω αυτό γιατί είναι χρήσιμο σε μόλις ένα δευτερόλεπτο.
>> Παρατηρήστε ότι εδώ έχουμε αυτό το φάσμα πάλι. για κάτι στο 1, τελεία
dot dot, 2, πράγμα που σημαίνει ότι Αυτός ο βρόχος θα εκτελεστεί δύο φορές.
Αλλά αυτό αντιπροσωπεύει μια ψευδομεταβλητή.
Αυτό σημαίνει ότι δεν είμαι πραγματικά πρόκειται να να χρησιμοποιούν αυτήν τη μεταβλητή οπουδήποτε
εσωτερικό αυτού του βρόχου.
Θέλω μόνο αυτή τη γραμμή κώδικα για να τρέξει δύο φορές,
χωρίς να χρειάζεται να γνωρίζετε η αξία της εν λόγω σειράς.
>> Έτσι, σε αυτή την περίπτωση Τρέχω αποτέλεσμα φορές x δύο φορές, το οποίο κατ 'ουσίαν
σημαίνει ότι είμαι τετραγωνισμό αυτήν την τιμή.
Και αυτό συμβαίνει σε λειτουργούν όπως θα περιμέναμε.
Δύναμη του 2, περνώντας την τιμή 2.0 μας δίνει μια έξοδο 4.
3.2 εργασίες για 10.24.
>> Τώρα μπορούμε να κάνουμε μια παρόμοια πράγμα για την εξουσία του 3.
Αλλά τώρα αλλάξει μόνο την περιοχή.
Για ψευδομεταβλητή σε 1 έως 3, πολλαπλασιάστε 3 φορές,
και να κάνει το ίδιο πράγμα.
>> Έτσι, αυτό μπορεί να αισθάνεται λίγο σκηνοθετημένη.
Αλλά υπάρχει μια σημαντική πράγμα το οποίο εδώ
είναι ότι κοιτάζοντας αυτά δύο λειτουργίες, υπάρχει
μόνο ένα πράγμα που είναι διαφορετικό, η οποία είναι αυτή η τιμή στην περιοχή.
Όλα τα άλλα σχετικά με αυτά τα δύο λειτουργίες, ισχύς 3 και δύναμη του 2,
είναι, στην πραγματικότητα, επειδή ταυτόσημα εργάζονται με τον ίδιο τρόπο.
>> Έτσι, σε αυτό το σημείο, λίγο κώδωνα του κινδύνου θα πρέπει να πηγαίνει μακριά.
Ας ελπίσουμε ότι αυτό που λέτε, Ξέρετε, αυτό αισθάνεται λίγο
όπως η διπλή προσπάθεια.
Ίσως υπάρχει ένας τρόπος που θα να είναι σε θέση να ενσωματώσουν όλα αυτά
και να παρέχει μια λειτουργία ή να δημιουργήσετε μια λειτουργία που
κάνει ακριβώς ό, τι θέλετε χωρίς να χρειάζεται να πληκτρολογήσετε ρητά.
Και αυτό είναι ό, τι η δύναμη του κλεισίματος μας επιτρέπει να κάνουμε.
Έτσι, ας ρίξουμε μια ματιά σε αυτό.
Και εγώ θα περάσουν μερικά λεπτά σε αυτό, διότι αυτό
Είναι πολύ σημαντικό για Swift.
Βλέπουμε αυτό όλη την ώρα.
Εμείς πάμε για να ορίσουμε μια συνάρτηση.
Είναι πρόκειται να κληθεί powerOf.
Είναι πρόκειται να δεχτεί ένα παράμετρο που ονομάζεται y του τύπου Int.
Αλλά ρίξτε μια ματιά στο είδος επιστροφής.
Ο τύπος επιστροφής είναι, σε παρενθέσεις, διπλό βέλος διπλό.
Πράγμα που σημαίνει ότι αυτή τη λειτουργία, Αυτό powerOf λειτουργία,
επιστρέφει μια λειτουργία.
Αυτό είναι ένα διπλό αποδοχή και επιστρέφουν ένα διπλό.
Έτσι ώστε να μπορεί να ακούγεται είδος της τρελό, αλλά ας μετακινηθείτε προς τα κάτω λίγο
και να κοιτάξουμε να δούμε τι θα συμβεί.
Είμαστε εσωτερικό αυτού του powerOf λειτουργία.
Είμαστε δημιουργώντας μια νέα λειτουργία καλείται εκθετικός,
αλλά δεν έχει σημασία τι είναι.
>> Παρατηρήστε ότι αυτό έχει η τιμή εισόδου x.
Και παίρνει σε δίκλινο και επιστρέφουν ένα διπλό.
Και αυτό είναι το ίδιο κώδικα που είδαμε παραπάνω, εκτός από το ότι η τιμή των 2
ή η αξία του 3, ότι άνω όριο σε αυτή την περιοχή,
έχει αντικατασταθεί με Αυτή η τιμή του y, το οποίο
ήταν η αρχική παράμετρο της λειτουργίας powerOf μας.
Και σε αυτό το σημείο, επιστρέψει εκθετικός.
Είμαστε επιστρέφοντας τη λειτουργία.
>> Είναι κάτι σαν ένα μικρό μυαλό ανατίναξη.
Αλλά ας φανταστούμε τι θα συμβεί όταν καλώ αυτή τη λειτουργία powerOf
και να περάσει σε αυτό κάποια αξία σαν 2.
Τι αυτό σημαίνει είναι ότι Τώρα έχω την τιμή
2 για y, το οποίο σημαίνει ότι αυτή η αξία y σε αυτή τη λειτουργία εκθετικός
θα είναι η τιμή 2.
Είμαι, όμως, αυτό που επιστρέφουν λειτουργία εκθετικός.
>> Έτσι προσέχει τι λέει Swift μου έχουν δημιουργήσει σε αυτή την περίπτωση.
ας πλατεία είναι ένας ορισμός, είναι μια συνάρτηση που δέχεται ένα διπλό
και επιστρέφει ένα διπλό.
Έχω δημιουργήσει μια λειτουργία ότι κάτι πλατείες
με αυτό το μηχανισμό εδώ.
Και πραγματικά αυτό που συμβαίνει είναι ότι επιστρέφει αυτή τη λειτουργία
εκθετικός, αλλά αυτή η τιμή y είναι τυλιγμένο στο εσωτερικό του.
Και έτσι τώρα κάθε φορά που μπορώ να χρησιμοποιήσω αυτό το μεταβλητής ή σταθερής αυτό που ονομάζεται
πλατεία, είναι ότι πρόκειται να συμπεριφέρονται ως μια συνάρτηση.
Και γι 'αυτό μπορεί στη συνέχεια να καλέσετε αυτή τη μεταβλητή όπως εγώ θα αποκαλούσα μια λειτουργία,
και να περάσει σε αυτό έναν αριθμό, όπως στην προκειμένη περίπτωση 3.
Και εγώ τότε θα τακτοποιήσει αυτή την τιμή.
Έτσι 3 τετράγωνο τότε θα γίνει 9, όπως μπορούμε να δούμε εδώ.
>> Πραγματικά τρελό, αλλά αυτό τώρα μου δίνει την ευκαιρία
να δημιουργήσει άλλες λειτουργίες powerOf.
Όπως μπορώ να πω, εντάξει, αλλά τώρα θέλω για να δημιουργήσετε μια νέα λειτουργία, powerOf (3),
και αποθηκεύστε σε αυτό για μια σταθερά που ονομάζεται κύβος.
Και τώρα κύβος θα είναι μια ξεχωριστή λειτουργία που θα συνέχεια
να λάβει κάποια αξία ως πρώτη ύλη και ότι κύβος αξία, όπως μπορούμε να δούμε στην κάτω γραμμή
εδώ.
κύβος του 2 πρόκειται να οδηγήσει σε 8.
>> Ας ελπίσουμε ότι τα πράγματα πολύ πετυχημένος.
Ποτέ δεν έχω δει αυτό πριν.
Σας ενθαρρύνω να εξετάσει το κλείσιμο και να διερευνήσουν αυτό το λίγο περισσότερο.
Είναι πραγματικά ισχυρή ουσία βλέπουμε πολλές σε JavaScript και μερικές άλλες γλώσσες.
Είναι πραγματικά ζωτικής σημασίας για την κατανόηση APIs καθώς και
ότι θα φτάσουμε σε μόλις ένα δευτερόλεπτο.
Ναί?
>> Κοινό: Όταν κάνετε powerOf (2), παρένθεση, και στη συνέχεια
άλλο παρένθεση, ένα άλλο input-- είστε ουσιαστικά αντικαθιστά το τετράγωνο.
DAN AMRMENDARIZ: Οπότε ψάξε την τελευταία γραμμή εδώ.
Είναι πραγματικά δυνατόν να εντελώς το κάνουμε αυτό αλυσιδωτή όπως προτείνατε.
Έτσι powerOf (5) σημαίνει ότι θα πάμε να έχουν ένα εκθετικό όρο από 5 έως εδώ.
Έτσι, αυτό είναι κατ 'ουσίαν πρόκειται να είναι η ίδιο πράγμα 4 στην πέμπτη δύναμη,
γιατί έχουμε δημιουργήσει ένα exponentiating λειτουργούν για την πέμπτη δύναμη,
και είμαστε περνώντας μέσα ότι η λειτουργία της τιμής 4.
Και έχουμε αυτή την τιμή ότι περιμένουμε, 1024.
Κοινό: Και δεν είναι ένας το όνομα, έτσι ώστε να διευκολύνει
να διαβάσει, την πλατεία οτιδήποτε.
>> DAN AMRMENDARIZ: Σωστά, ακριβώς.
Έτσι, πριν το βάλετε μόνο σε ένα σταθερό σημείο αυτό,
ότι είναι πιο εύκολο να χρησιμοποιούν αυτή την ονομασία.
Ναί?
>> ΚΟΙΝΟ: Στο πλαίσιο αυτό, powerOf, είναι μέρος
της γλώσσας προγραμματισμού σε αντίθεση με τον τρόπο που
σκεφτείτε powerOf σε [δεν ακούγεται];
DAN AMRMENDARIZ: Λοιπόν Στην περίπτωση αυτή, powerOf
είναι απλά το όνομα του συνάρτηση που ορίζεται εδώ.
Έτσι δεν είναι εγγενείς στην ίδια τη γλώσσα,
αλλά, αντίθετα, είναι ακριβώς μια λειτουργία που έχει
αυτό το όνομα γιατί μου δώσει αυτό το όνομα.
Οποιεσδήποτε άλλες ερωτήσεις;
Εντάξει.
>> Τώρα αυτό είναι μεγάλη.
Αλλά δεν πρόκειται να δείτε μια πολλές λειτουργίες κλεισίματος, η οποία
είναι σαν αυτό, όπου μπορείτε να καθορίζουν, στο εσωτερικό από μια λειτουργία, μια άλλη λειτουργία.
Και μπορείτε να το κάνετε.
Αλλά δεν είναι το είδος του πραγματικά απαραίτητο, σωστά;
Όπως και γιατί μπορώ να το ορίσει συνάρτηση που ονομάζεται εκθετικός
και στη συνέχεια να επιστρέψει αμέσως.
Γιατί δεν μπορώ απλά αμέσως να επιστρέψει αυτή η λειτουργία;
>> Και στην πραγματικότητα, αυτό είναι ακριβώς η ιδέα πίσω από μια ιδέα που ονομάζεται
ανώνυμες λειτουργίες, όπου ανώνυμες λειτουργίες δεν κάνει πραγματικότητα
έχει ένα όνομα, επειδή Δεν χρειάζεται να έχετε ένα.
Και στην προκειμένη περίπτωση, στην 7Β, μπορούμε να βρούμε ακριβώς αυτό.
Είναι όλοι το ίδιο κωδικό, κάνει ακριβώς το ίδιο πράγμα,
αλλά τώρα έχουμε αλλάξει ελαφρώς έτσι ότι αυτή η λειτουργία powerOf αμέσως
επιστρέφει μια λειτουργία.
Σημειώστε ότι μετά την επιστροφή, υπάρχει μια ανοιχτή σγουρά στήριγμα.
Είναι αναμένει την είσοδο αυτή Double.
Είναι αναμένει ότι η έξοδος διπλό.
Και τότε η λέξη-κλειδί στο χωρίζει το ίδιο τον κώδικα.
Έτσι, αυτό είναι μια ανώνυμη λειτουργία.
Δεν έχει πραγματικά ένα όνομα, ενώ πριν ονομαζόταν εκθετικός.
Αλλά, όπως είδαμε, ακριβώς πραγματικά δεν αναφέρονται σε εκθετικό
εκτός αυτής της λειτουργίας.
Γι 'αυτό δεν είχε σημασία.
Έτσι, αυτό είναι ανώνυμη συνάρτηση λεγόμενη επειδή είναι ανώνυμος,
αλλά είναι εξακολουθεί να χρησιμοποιείται στο πλαίσιο του κώδικα αυτού.
>> Τα επόμενα δύο αυτά είμαι πρόκειται να συνεχίσει ελπίζουμε
φυσάει το μυαλό σας λίγο.
Μπορούμε να απλοποιήσει αυτή ακόμη περισσότερο.
Επειδή όπως ήταν έξυπνα επισημάνθηκε νωρίτερα,
ίσως γνωρίζουμε ότι, από συνάγοντας από αυτό τον κωδικό, τι
η έξοδος του κώδικα αυτού θα είναι.
Και στην πραγματικότητα, σε αυτή την ανώνυμη συνάρτηση, στην πραγματικότητα, μπορούμε να συμπεράνουμε τα είδη των δεδομένων.
>> Έτσι, σε αυτό το ένα, δεν είμαστε πλέον πρέπει να ορίσετε ρητά
το είδος των δεδομένων που είναι να εισόδου και εξόδου από αυτήν τη λειτουργία
για δυο λόγους.
Το πρώτο είναι ότι έχουμε καθορίσει, επάνω στο πρωτότυπο της συνάρτησης που περικλείει,
τι είδους δεδομένα ανώνυμες λειτουργία θα πρέπει εισόδου και εξόδου.
Και από την άλλη, έχουμε μπορεί να συναχθεί από τον κώδικα
εδώ κάτω που δεχόμαστε εισόδου που είναι τύπου double
και επιστρέφουν ένα διπλό.
>> Παρατηρήστε ότι εδώ δεν έχουμε ρητά ορίζονται τα ονόματα των επιχειρημάτων
ότι αυτή η λειτουργία είναι η αποδοχή.
Και έτσι βλέπουμε μπορούμε να αναφερθούμε οι παράμετροι αυτές χρησιμοποιώντας $ 0, $ 1,
ούτω καθεξής και ούτω καθεξής, ανάλογα με την ο αριθμός των εν λόγω παράμετρος που χρησιμοποιήθηκε
σε αυτή τη λειτουργία.
>> Αυτό είναι κάτι που θα έχετε την ευκαιρία για να δείτε πολλά είναι αυτή η ανοιχτή σγουρά στήριγμα
ορισμός που ακολουθείται από ένα $ 0, και στη συνέχεια κάποιες λειτουργίας,
και, στη συνέχεια, ένα κλειστό σγουρά στήριγμα.
Αυτή είναι μια ανώνυμη συνάρτηση ότι εκτελεί αυτή τη λειτουργία.
Έχει αυτήν την παράμετρο, όπου Είναι ο τύπος είναι συναχθεί.
Αυτό πρώτη παράμετρος είναι $ 0.
Και κάποια λειτουργία είναι συμβαίνει σε αυτό το $ 0.
>> Κοινό: Έτσι, το σύμβολο του δολαρίου σημαίνει παράμετρος ουσιαστικά,
και 0 σημαίνει την πρώτη;
DAN Armendariz: Αυτό είναι σωστό.
Έτσι, το σύμβολο του δολαρίου σημαίνει βασικά παράμετρος, και 0 σημαίνει την πρώτη.
Αλλά λειτουργεί ειδικά στην Αυτή η περίπτωση κατά την οποία δεν έχω το όνομα
τα επιχειρήματα ανώνυμα μου λειτουργία.
>> Κοινό: Μήπως Perl ή κάτι έχει Αυτό το σύμβολο του δολαρίου, δολαρίου 0 εκεί;
DAN Armendariz: Μήπως η οποία, λυπάμαι;
Κοινό: Μήπως Perl έχουν Αυτό δολαρίου 0, δολάριο 1--
DAN Armendariz: Δεν είμαι πάρα πολύ εξοικειωμένοι με Perl,
αλλά αυτό που καθορίζει PHP μεταβλητές βασίζονται σε σημάδια δολαρίων.
Και μπορεί να υπάρχουν κάποιες γλώσσες που έχουν χαρακτηριστικά όπως αυτό.
Στην πραγματικότητα, το Swift δανείζεται ένα πολλά χαρακτηριστικά, όπως αυτό
από πολλές άλλες γλώσσες.
Βλέπουμε υποδείξεις της Python σε αυτό.
Αυτός ο ορισμός του τύπου φαίνεται να προέρχεται από OCaml.
Και έχουμε ακριβώς ένα σωρό τα πράγματα από πολλές διαφορετικές γλώσσες.
Αυτό είναι ένα από τα ωραία πράγματα για Swift
είναι ότι παίρνει πολλά από τα καλύτερα ιδέες από μια δέσμη των γλωσσών
και όλα αυτά μαζί shoehorns σε ένα σούπερ γλώσσα.
Στην πραγματικότητα, αν μου επιτρέπετε να συνεχίσει φυσά το μυαλό σας,
έτσι έχουμε κάνει όλα αυτά.
Μπορούμε ίσως να απλοποιήσει αυτή τη λίγη σιγά να συνειδητοποιούν ότι, φυσικά,
Swift έχει exponentiating ενσωματωμένη λειτουργία σε.
Αν μπορώ να εισάγω τον Δαρβίνο, η οποία είναι ακριβώς η βιβλιοθήκη που
διαθέτει αυτή τη λειτουργία ονομάζεται Pow, τώρα Μπορώ να απλοποιήσει τη δύναμή μου της λειτουργίας
να είναι τα ακόλουθα.
Δεν πρόκειται να επιστρέψει Αυτή η ανώνυμη συνάρτηση.
>> Αλλά κοιτάξτε πόσο απλό είναι αυτό τώρα.
Αυτή είναι μια ανώνυμη συνάρτηση που δέχεται κάποιο είδος των δεδομένων,
και πρόκειται να είναι ένα επιχείρημα συγκεκριμένα,
Παραπέμπεται σε $ 0, ο οποίος είναι τύπου double.
Δεν πρόκειται να επιστρέψει ένα είδος διπλό.
Αλλά η δήλωση επιστροφής είναι τώρα σιωπηρή.
>> Και είναι αυτό ακριβώς στυλ που Είναι πολύ, πολύ διαδεδομένη στο Swift,
σε όλη τη χώρα.
Εμείς πάμε να δούμε αυτό όλη την ώρα στο Swift.
Έτσι δείχνω όλα αυτά για να Σας εξαιτίας αυτής της σύνταξης.
Αυτό είναι πολύ κοινό για να δείτε, το οποίο σημαίνει ότι
είναι μια ανώνυμη συνάρτηση που εκτελεί
κάποια λειτουργία σε αυτά τα επιχειρήματα.
Και υπάρχει μια σιωπηρή επιστροφή.
Γι 'αυτό είναι απολύτως το ίδιο πράγμα για εμάς να το πω αυτό, ακριβώς εδώ.
>> Επειδή αυτή σγουρά βραχίονα είναι μια λειτουργία,
είμαστε εκτέλεση αυτής της λειτουργίας σχετικά με το πρώτο επιχείρημα.
Εμείς πάμε για να επιστρέψει αυτό.
Αλλά αυτό είναι το εξωτερικό επιστροφή επιστρέφοντας αυτή όλης λειτουργίας,
ότι ολόκληρη η ανώνυμη συνάρτηση ότι έχουμε μόλις δημιουργήσατε.
Οποιεσδήποτε άλλες ερωτήσεις;
Εντάξει, δεν ξέρω αν εσείς είστε έτοιμοι για αυτό,
αλλά μπορούμε να πάμε ακόμα πιο τρελός με το Swift.
Είστε έτοιμοι?
Εντάξει, αυτό είναι μεγάλη.
>> Τώρα έχουμε πραγματικά τη δυνατότητα να, σε Swift, λόγω του τρόπου με αρθρωτή
και πως με βάση το πρωτόκολλο που είναι, να καθορίσει τη δική του freaking φορείς μας.
Όπως και στην περίπτωση αυτή, δεν είχαμε χειριστή για exponentiation-- καλά,
για την εκτέλεση των αρμοδιοτήτων κάτι.
Αλλά μπορώ να σε Swift, ορίζουν ένα νέο φορέας που κάνει ακριβώς αυτό.
Έτσι, σε αυτή την περίπτωση δεν υπάρχει ένα μάτσο σύνταξη εδώ.
Και εγώ θα σας επιτρέψει να κοιτάξετε στο σπίτι, εάν κοιτάξει κανείς αυτό.
Αλλά εμείς καθορίζουμε αυτό InFix χειριστή, **, η οποία θα μας επιτρέψει στη συνέχεια,
καθορίζοντας τι λειτουργία ** πραγματικότητα
έχει, να αποδεχθεί ένα αριστερό χέρι πλευρά και ένα δεξιά πλευρά,
και στη συνέχεια να επιστρέψει ο εκθέτης της ότι αριστερή πλευρά προς την δεξιά πλευρά.
>> Και έτσι τώρα ξαφνικά μου έχουν δημιουργήσει μια νέα αριθμητή.
Έτσι 2 ** 3 σημαίνει 2 με την τρίτη δύναμη.
[Μυαλό ανατίναξη ΗΧΟΥ] Αυτή η το ίδιο θα πρέπει να σας κάνει να είναι όπως,
Εντάξει, βίδα Γ Πάω Swift σε όλη τη διαδρομή.
Αυτό είναι υπέροχο.
Αυτό είναι αρκετά φανταστική.
>> Αν και αυτό είναι ένα μεγάλο παράδειγμα.
Αλλά έχω ποτέ μια φορά έξω αυτού του παραδείγματος πράγματι
ορίζεται το δικό μου χειριστή.
Αλλά και πάλι, αυτό δείχνει μια πολλή από τη δύναμη της Swift
και γιατί αυτό είναι πραγματικά πραγματικά πολύ δροσερό.
Εντάξει, ναι;
Κοινό: Αν είστε τον καθορισμό των δικών σας φορέα,
πώς ξέρετε εσείς δεν κάνετε λάθος προσπαθήσουν να δημιουργήσουν ένα φορέα που είναι
κάπου σε C, όπως κρυμμένο κάπου στο Swift,
σαν μια σκοτεινή αυτή που σας μπορεί να μην έχετε ξαναδεί.
>> DAN Armendariz: Έτσι, αν προσπαθείτε να καθορίσουν τις δικές σας επιχειρήσεις,
υπάρχει ο κίνδυνος του καθορισμού ένα πάνω από μια υπάρχουσα επιχείρηση.
Αυτό πηγαίνει σε ένα επίπεδο λεπτομέρειας που Δεν νομίζω ότι έχουμε χρόνο να πάει πέρα.
Αλλά αυτό είναι ένα ρίσκο.
Και αυτό είναι στην πραγματικότητα ο πραγματικός λόγος Εγώ δεν χρησιμοποιούν το σύμβολο δρομέα, η οποία
όταν είμαστε δακτυλογράφηση δύναμη, που συνήθως χρησιμοποιήστε λίγο καρέ 4 5 ή κάτι
όπως αυτό, ακριβώς τη στιγμή που είμαστε Gchatting φίλους ή οτιδήποτε άλλο.
Αλλά στην περίπτωση αυτή, ότι στην πραγματικότητα θα είχε προκαλέσει μια σύγκρουση.
Και γι 'αυτό μόνο και μόνο επειδή αποφεύγεται Έτυχε να γνωρίζω σε αυτή την περίπτωση
ότι αυτό θα προκαλέσει τη συγκεκριμένη σύγκρουση.
>> Εντάξει.
Τώρα, δυστυχώς, για τα τελευταία επτά λεπτά,
Πρέπει να συνεχίσω να φυσά το μυαλό σας λίγο.
Έτσι, επιτρέψτε μου να σας δείξω κάποια άλλα πράγματα επίσης.
>> Σας έχουμε δείξει αυτήν την ιδέα της έχοντας αυτές τις ανώνυμες λειτουργίες,
Αυτά τα κλεισίματα που σας επιτρέπουν να το είδος των λειτουργιών περνούν γύρω.
Μπορείτε να τα επιστρέψουν.
Μπορείτε να τους χειραγωγήσουν.
Μπορείτε να κάνετε όλα τα είδη των τρελά πράγματα.
>> Αλλά ένα άλλο πράγμα που συμβαίνει να είναι χρήσιμος
είναι η ικανότητα να, σε αντίθεση να επιστρέφουν αυτές τις λειτουργίες
σε λειτουργία, για να περάσει μια λειτουργία ως παράμετρος σε μια άλλη λειτουργία.
Ίσως να σκέφτεται καλά γιατί στη Γη Θα ήθελα να κάνω κάτι τέτοιο;
>> Λοιπόν, ας πούμε ότι θέλω να λαμβάνουν αυτό το φορέα ο οποίος θα
εργάστηκαν τόσο σκληρά για να δημιουργήσουμε και να εφαρμόσουν ότι σε μια δέσμη των διαφορετικών αριθμών
σε μία συστοιχία.
Έτσι, σε αυτή την περίπτωση έχω μια σειρά από integers-- 1, 4, 7, 2, 5, 10, 56.
Και θέλω να τους όλα τα διπλά.
Ο τρόπος ότι θα συνήθως κάνετε είναι να γράψετε μόνο
ένα απλό για βρόχο που επαναλαμβάνεται σε όλα αυτά
και να εκτελέσει κάποιο είδος τετράγωνο λειτουργία πάνω τους,
εισαγωγή αυτών των νέων αξιών σε μια νέα μεταβλητή, ή μάλλον, μια νέα σειρά εδώ.
Και η αξία της παραγωγής του αποτέλεσμα είναι τότε όλες αυτές τις συστοιχίες,
ή μάλλον όλα αυτά στοιχεία τώρα στο τετράγωνο.
>> Και θα μπορούσαμε να κάνουμε το ίδιο πράγμα για cubing αυτό,
αλλά λίγο κώδωνα του κινδύνου Θα πρέπει να πάει μακριά
λέγοντας ότι ίσως υπάρχει κατά κάποιο τρόπο ότι θα
να είναι σε θέση να απλοποιήσει αυτό το λίγο.
Και στην πραγματικότητα δεν υπάρχει.
Τι και αν θα μπορούσε να δημιουργήσει μια λειτουργία που μας επιτρέπει
να δεχθεί, ως ένα αρπακτικό, μια συνάρτηση;
Έτσι, στην περίπτωση αυτή, να λάβει μια ματιά σε αυτά τα επιχειρήματα.
Εμείς πάμε για να δεχτεί μια λίστα των διπλασιάζεται.
Και μετά θα πάμε να δεχθεί μια λειτουργία
σε μια μεταβλητή που ονομάζεται f που πρόκειται να λάβει ένα διπλό και να επιστρέψει ένα διπλό.
Και η συνολική παραγωγή όλης αυτής της λειτουργίας
που ονομάζεται mapper πρόκειται να επιστρέψει έναν πίνακα που ονομάζεται διπλό.
>> Τι αυτό θα μου επιτρέψετε στη συνέχεια να κάνουμε είναι να επαναλάβει τη διάρκεια αυτής της λίστας
και να κάνει το ίδιο πράγμα, αλλά τώρα εφαρμόζουν την εν λόγω λειτουργία σε κάθε
των μεμονωμένων τιμών στον εν λόγω κατάλογο.
Γι 'αυτό και δεν ξέρω πραγματικά τι f είναι.
Δεν έχει σημασία για μένα.
Αλλά εφ 'όσον χρειάζεται σε δίκλινο, εκτελεί κάποια εργασία σε αυτόν,
και στη συνέχεια να επιστρέφει ένα Διπλό, τότε θα είναι
είναι σε θέση να χαρτογραφήσει τη λειτουργία αυτή σε όλη την κάθε στοιχείο στη λίστα.
>> Και αυτό το είδος του προγραμματισμού είναι κάλεσε τις ανώτερες λειτουργίες τάξης,
όπου είμαστε περνώντας λειτουργίες περίπου ως παράμετροι
και να κάνουμε πράγματα με τις λειτουργίες.
Είναι κάπως σαν να όλα αυτά ιδέες που έχουμε μάθει στο CS50
και τη λήψη τους είδους του στο επόμενο επίπεδο.
Και όλα αυτά είναι πράγματα στυλ CS51.
Και έτσι θα πάει σε βάθος περισσότερο στα μαθήματα όπως αυτό.
>> Αλλά αυτό είναι επίσης σημαντικό εδώ γιατί
δείτε πολλές λειτουργίες που χρησιμοποιούνται στην Swift
ότι ουσιαστικά δεν αυτό, όπου έχουμε
ορισμένοι αριθμοί, ορισμένοι συστοιχία αριθμών.
Εμείς πάμε για να περάσει ότι συστοιχία σε mapper μας.
Και είμαστε επίσης πρόκειται να περάσει κάποια λειτουργία, η οποία
έχουμε ήδη οριστεί εδώ.
Είναι πρόκειται να είναι τετράγωνο.
Και θα πάμε να, στη συνέχεια, Πλατεία όλων αυτών των αριθμών
και να αποθηκεύσετε ότι σε αυτό το αποτέλεσμα εδώ.
>> Έτσι αυτή η περίπτωση που έχουμε καθορίσει μας τη δική της λειτουργία που ονομάζεται mapper.
Αλλά αυτό ακριβώς το πράγμα είναι, Στην πραγματικότητα, χτισμένο σε Swift.
Υπάρχει μια ποικιλία από λειτουργίες που ονομάζεται χάρτη.
Υπάρχει ένας χάρτης λειτουργίας, υπάρχει μια μείωση της λειτουργίας,
και υπάρχει και η λειτουργία του φίλτρου, οι οποίες εφαρμόζονται κατ 'ουσίαν λειτουργίες
για κάθε στοιχείο σε μια λίστα για να τις τροποποιήσετε με κάποιον τρόπο.
>> Κοινό: Έτσι, από τη στιγμή που μετασχηματίζουν τα δεδομένα σε άλλη μορφή
μέσω function--
DAN Armendariz: Δεξιά.
Ναι, έτσι ώστε η λειτουργία ότι είμαστε αποδοχή
μετασχηματίζει τα δεδομένα με κάποιο τρόπο.
Σε αυτή την περίπτωση, ήμασταν είτε τετραγωνισμό του, είτε ήταν το cubing,
ή πραγματικά, θα μπορούσε να εκτελέσει καμία λειτουργία σε αυτό καθόλου.
>> Αλλά επιτρέψτε μου να σας δείξει πώς αυτή η συνέχεια πρόκειται να δούμε στην πράξη.
Και πάλι, τρέχω ένα λίγο χρόνο. έτσι δεν είμαι
πρόκειται να είναι σε θέση να πάει πάνω από όλα του πηγαίου κώδικα εδώ λεπτομερώς.
Αλλά εγώ σας ενθαρρύνω να το κάνουμε αυτό.
Θα το δημοσιεύσετε το συντομότερο μετά από αυτή την ομιλία.
>> Αλλά αν ρίξουμε μια ματιά σε αυτό, υποθέσουμε ότι έχουμε μια λίστα με αριθμούς,
μια σειρά από αριθμούς σε αυτό μεταβλητή που ονομάζεται αριθμούς.
Στη συνέχεια, θέλουμε να πραγματοποιήσουμε αυτό λειτουργία φίλτρων σε αυτούς τους αριθμούς.
Έτσι, το φίλτρο είναι υψηλότερη Λειτουργία τάξη που
δέχεται έναν πίνακα και επίσης μια λειτουργία.
Και σε κάθε στοιχείο σε ότι σειρά, εκτελεί τα καθήκοντα αυτά.
>> Αν αυτή η λειτουργία επιστρέφει αλήθεια, διατηρεί αυτό το στοιχείο.
Αν αυτή η λειτουργία επιστρέφει false, να πετάει αυτό το στοιχείο.
Και τότε επιστρέφει μία λίστα ότι συνέχεια γίνεται όλες
αυτών των στοιχείων που έχουν φιλτραριστεί.
>> Έτσι, με άλλα λόγια, αυτό είναι η ίδια ιδέα, το Βαθμολόγιο.
Θα μπορούσαμε να έχουμε μια ποικιλία βαθμών σε αυτό αριθμούς τιμή που ονομάζεται.
Θα μπορούσε να είναι 100, και 70, και 40, ούτω καθεξής και ούτω καθεξής.
Τι κάνει αυτό το φίλτρο είναι ειδοποίηση ότι αυτό είναι ότι συντακτική ζάχαρη
για μια ανώνυμη συνάρτηση.
Αυτή είναι μια ανώνυμη συνάρτηση λέγοντας ότι η παράμετρος που είμαι αποδοχή
πρόκειται να είναι, αν είναι μεγαλύτερο από 70,
τότε αυτό θα επιστρέψει αλήθεια, πράγμα που σημαίνει ότι αυτό το στοιχείο θα πρέπει να φυλάσσονται σε αυτό το φίλτρο.
Οπότε ας είμαστε λίγο Πιο συγκεκριμένα γι 'αυτό.
Αν έχω αυτή τη σειρά των αριθμών και αποτελείται από 100, 70, και 40,
Εκτελώ αυτό το φίλτρο λειτουργία σε κάθε ένα από αυτά.
Έτσι ώστε πρώτη είναι αυτή η τιμή του 100.
100 μεγαλύτερη ή ίση 70 Είναι αλήθεια, η οποία
σημαίνει ότι 100 διατηρείται σε Αυτό το νέο αντίγραφο της παρούσας διάταξης.
70 περνάει επίσης.
Αλλά δεν το κάνει 40.
Έτσι, αυτό επιστρέφεται στο passingCount είναι η συστοιχία των στοιχείων 100 και 70--
100, κόμμα, 70.
Αυτά ήταν τα μόνα δύο στοιχεία που κρατήθηκαν.
Και έτσι ο λόγος που πήγε γρήγορα μέσω Πολλά από αυτά τα είδη των υψηλής τάξης
τα πράγματα είναι επειδή αυτό είναι ότι η κοινή πράγμα που θα δείτε σε λίγο Swift
συχνά, εκτελεί κάποια λειτουργία χρήση αυτών των ανώνυμων σύνταξη της συνάρτησης.
>> Υπάρχει κάποια δροσερή ουσία.
Διακόπτες είναι πραγματικά ισχυρή σε Swift, Εννοώ απλά σαν τρελός, τρελός ισχυρό.
Μπορείτε να χρησιμοποιήσετε το διακόπτη, και μπορείτε να εφαρμόσετε τα πραγματικά
σε περιοχές, οι οποίες είναι το είδος της τρελό, και να κάνει φανταχτερά πράγματα όπως αυτό.
>> Αλλά στα τελευταία λεπτά, Θέλω να προχωρήσετε αρκετά μακριά
και να σας δείξει ένα συγκεκριμένο παράδειγμα για το πώς μπορούμε να δημιουργήσουμε στο iOS app χρησιμοποιώντας Swift.
Έτσι, όταν κάνετε αυτό, θα πρέπει να λάβει
μια ματιά στις at-- της Apple τεκμηρίωση, που
έχουν πολλά πραγματικά καλά σεμινάρια για τη δημιουργία πρώτη εφαρμογή σας.
Και ήθελα να σας ενθαρρύνω να κάνετε ότι, επειδή παίρνετε
σε όλα τα βήματα του τι ακριβώς να κάντε κλικ για να δημιουργήσετε μια εφαρμογή iOS.
>> Αλλά εδώ έχουμε αυτό το iOS app.
Και αυτό είναι ένα πολύ απλό app πραγματικά.
Αν τρέξω αυτό, επιτρέψτε μου να δείχνουν σας τι μοιάζει.
Το μόνο που κάνει ουσιαστικά είναι τραβά από το διαδίκτυο ένα αρχείο JSON
ότι έχω αποθηκευμένα σε έναν διακομιστή.
Και αυτό το αρχείο JSON ορίζει τις εικόνες που επιτρέπουν
Θέλω να περιηγηθείτε στη συνέχεια, στις μου app, εικόνες από τον web server μου.
>> Έτσι έχω εδώ getNextImage.
Φορτώνει μια εικόνα από το διαδίκτυο, και στη συνέχεια εμφανίζει στην οθόνη.
>> Έτσι, είναι αρκετά απλό.
Αλλά ο στόχος εδώ είναι να δείξουμε πώς μπορούμε να συνδυάσουμε τα πράγματα
από τις τελευταίες λίγες εβδομάδες του CS50 σε μια πραγματική εφαρμογή iOS.
Με άλλα λόγια, ίσως ένα από τα πράγματα που θα θέλετε να κάνετε
είναι να έχουμε μια εφαρμογή iOS ότι μπορεί να τραβήξει δεδομένα από το Διαδίκτυο
και να δείξει στον χρήστη κάποιες πληροφορίες.
Αυτό είναι εντελώς το σημείο αυτού του πηγαίου κώδικα εδώ.
>> Έτσι, υπάρχουν πολλά να πούμε γι ' πώς να το κάνουμε πραγματική ανάπτυξη iOS.
Υπάρχει ένα πολύ τρελό σύνταξης ότι δεν έχουμε δει αρκετά ακόμα
σαν μια τάξη, μια τάξη τι είναι στην πραγματικότητα.
Μπορούμε να αγνοήσουμε σε μεγάλο βαθμό ότι προς το παρόν.
>> Να σημειωθεί όμως ότι έχουμε περιέχονται εντός αυτό μια ποικιλία από πράγματα
ότι έχουμε ήδη δει, όπως λειτουργίες που έχουν συγκεκριμένα ονόματα.
Και όταν δίνουμε εκείνους Λειτουργεί τα σωστά ονόματα
που αναμένεται από το iOS, στην πραγματικότητα, αυτό αισθάνεται λίγο μαγικό.
Αλλά όταν δημιουργείτε ένα εφαρμογή iOS, υπάρχει
είναι συγκεκριμένα ονόματα λειτουργία που καλούνται από το ίδιο το τηλέφωνο
όπως η εφαρμογή φορτώνει να δοκιμάσετε για να δημιουργήσετε τη διαδικασία που στην πραγματικότητα
τρέχει την αίτησή σας.
Έτσι και πάλι, υπάρχουν πολλά πράγματα που έχω Πρέπει να αποσιωπήσει εδώ για να μπορέσουμε
να μιλήσει για το συγκεκριμένο θέμα.
Αλλά ήθελα να σας ενθαρρύνω να εξετάσουμε ίσως το άλλο σεμινάριο iOS, αλλά και ορισμένα
της σε απευθείας σύνδεση σεμινάρια που κάνουμε μια πολύ καλύτερη δουλειά που περιγράφουν
η συγκεκριμένη πληροφορία.
>> Αλλά μπορούμε να δούμε μερικά πράγματα που είναι ενδιαφέρουσα από τον κώδικα εδώ.
Σημειώστε ότι, αν έχουμε δηλώσεις.
Με την ευκαιρία, ένας σημαντικός πράγμα για το αν δηλώσεις
είναι ότι οι παρενθέσεις γύρω από τη Boolean έκφραση είναι προαιρετική.
Αλλά οι αγκύλες δεν είναι προαιρετική, δεν έχει σημασία πόσο λίγοι ή πολλοί γραμμές κώδικα
έχετε σε ένα if.
Δεν μπορείτε να έχετε μια περίπτωση καταστάσεων χωρίς αγκύλες στο Swift.
>> Και αυτό είναι, επίσης, ένα είδος ανόητο.
Αλλά υπάρχουν ιστορικοί λόγοι για αυτό.
Είναι υποτίθεται για να σας σώσει από τον εαυτό σας.
Όπως και αυτό, για παράδειγμα, δεν μπορείτε να εξαλειφθούν τα άγκιστρα γύρω από αυτό
if.
Αυτοί είναι στην πραγματικότητα απαιτείται.
Γι 'αυτό σας ενθαρρύνω να ρίξτε μια ματιά σε αυτό.
Αλλά υπάρχει ένα ακόμη κατασκευή που θέλω
για να σας δείξει ότι περίπου Swift είναι νέα σε σύγκριση Swift 2.0
σε παλαιότερες εκδόσεις του Swift, η οποία είναι η ακόλουθη.
Ας δούμε πού το έβαλα εδώ;
>> Έτσι, σε αυτή τη λειτουργία που ονομάζεται fetchJSON, αυτή η λειτουργία
είναι υπεύθυνη για το τράβηγμα ότι JSON αρχείο από μια διεύθυνση URL, το οποίο ακριβώς έτσι συμβαίνει
να λειτουργεί από το CS50 IDE μου.
Μόλις άρχισα Apache, να θέσει το αρχείο JSON μου εκεί,
και είμαι σε θέση να τραβήξει ότι, στη συνέχεια, δεδομένα από το Διαδίκτυο χρησιμοποιώντας
αυτή η δράση και αυτό το URL, το οποίο παρέχεται από το τηλέφωνο.
Είναι ένα που παρέχονται από βιβλιοθήκη που χρησιμοποιείτε όταν
κάνετε κάποια iOS app ανάπτυξης.
>> Σημειώστε εδώ ότι υπάρχει αυτή η ασυνήθιστη συντακτική δομή που ονομάζεται φρουρά.
Και πραγματικά όλα αυτά είναι σε Swift είναι ένας τρόπος ελέγχου
ότι κάποια πράγματα έχουν πληρούνται προτού
προχωρήσει με το υπόλοιπο της λειτουργίας.
Γι 'αυτό και θα μπορούσε να έχει, με τη χρήση αυτό το προαιρετικό τύπου,
Θα μπορούσα να είχα βρει το URL από εκτελεί αυτή τη λειτουργία NSURL
και την αποθήκευση ότι σε μια διεύθυνση URL σταθερή, και στη συνέχεια τον έλεγχο
για να δούμε αν η διεύθυνση URL ήταν μηδενική, διότι επρόκειτο να επιστρέψει μια προαιρετική τύπου.
Και αν ήταν μηδενική, τότε θα ήθελα εκτυπώσετε ένα σφάλμα και στη συνέχεια να επιστρέψουν.
>> Αλλά αντ 'αυτού, τι αφήνει φρουρά κάνουμε είναι ότι πολύ το πράγμα,
αλλά βεβαιωθείτε ότι είναι στην πραγματικότητα η υπόθεση ότι η διεύθυνση URL
έχει ρυθμιστεί σωστά από NSURL.
Και εάν είναι, τότε παραλείπει αυτό, και
θα σας επιτρέψει να προχωρήσει με url έχει καθοριστεί σωστά.
Αλλά αν είναι αλήθεια ότι url δεν έχει οριστεί σωστά,
αν αυτή η συνάρτηση επιστρέφει ένα σφάλμα ή κάποιο άλλο απροσδόκητο πράγμα
συμβαίνει στην πραγματικότητα, αυτό το κατασκεύασμα φρουρά μας επιτρέπει να τότε η έξοδος ότι σφάλματος
και να επιστρέψει αμέσως.
Ναί?
>> Κοινό: Έτσι είναι το είδος σαν ένα, αν στη συνέχεια άλλο;
DAN Armendariz: Είναι το είδος του σαν ένας άλλος αν τότε, ναι,
εκτός από το ότι αυτό το URL είναι τότε ορίζεται για τα πάντα κάτω από αυτό.
Αν περάσει ο προφυλακτήρας, τότε όντως θα γεμίσει με δεδομένα
και μπορούν να χρησιμοποιηθούν στο υπόλοιπο πηγαίο κώδικα σε λειτουργία σας.
Έτσι υποψιάζομαι ότι πρόκειται να αρχίσουμε να βλέπουμε αυτό το προφυλακτήρα καθώς και.
Και να λαμβάνει υπόψη της ότι.
>> Έτσι απλά κοιτάζοντας ένα ζευγάρι των άλλων τα πράγματα, το δικαίωμα αυτό εδώ είναι ό, τι,
νομίζεις, απλά βασίζονται σε ό, τι μιλούσαμε για πριν;
>> Κοινό: Σκεφτείτε ότι θα τρέξει στη λίστα;
>> DAN Armendariz: Έτσι ώστε να είναι κοντά.
Αυτή είναι μια λειτουργία που ορίζουμε.
Και είμαστε εισαγωγή αυτής της λειτουργίας ως επιχείρημα για αυτή τη λειτουργία εδώ.
>> Κοινό: [δεν ακούγεται], αν όχι μηδαμινές.
Έτσι είναι στη λίστα, έτσι δεν είναι;
>> DAN Armendariz: Εάν το σφάλμα δεν είναι μηδενική, έτσι ώστε is-- γι 'αυτό πρέπει να μετακινηθείτε.
Λοιπόν, ας δούμε, δεν μπορώ πραγματικά να μετακινηθείτε προς τα δεξιά εδώ.
σφάλμα είναι ένα επιχείρημα που είναι πέρασε σε αυτήν την ανώνυμη λειτουργία.
Αυτή είναι μια ανώνυμη λειτουργία.
Δεν έχει όνομα.
Αλλά δεχόμαστε αυτά τα τρία επιχειρήματα, στοιχεία, απάντηση, και το λάθος.
Και αυτό δεν πρόκειται να επιστρέψει άκυρη, έτσι δεν πρόκειται να επιστρέψει τίποτα.
Και αυτό είναι τα περιεχόμενα αυτής της λειτουργίας.
Και τότε έχουμε πρόσβαση στο εσωτερικό που λειτουργία σε καθένα από αυτά τα επιχειρήματα.
>> Έτσι είναι ένας ανεμοστρόβιλος περιοδεία της γλώσσας.
Αλλά ελπίζω ότι με αυτό, ελπίζω, όπως μπορείτε να
Μια ματιά σε μερικά από τα μαθήματα ειδικά για iOS ανάπτυξη με Swift,
ειδικά αν πάτε να Για την ανάπτυξη Ιστού page-- της Apple
έχουν πολύ πολύ καλό tutorials για να ξεκινήσετε.
Αλλά ελπίζουμε ότι ακριβώς αυτή η ώρα της ομιλίας σχετικά με τη σύνταξη η ίδια έχει δώσει
Είστε αρκετά για να ξεκινήσετε με αυτό.
>> Θα δημοσιεύουμε όλη αυτήν την πηγή κώδικα στην ιστοσελίδα του σεμιναρίου
το συντομότερο δυνατόν, και επίσης τις διαφάνειες έτσι ώστε να έχουν ένα σημείο αναφοράς για όλους εκείνους.
Όμως, η καλή τύχη με τα έργα σας.
Και σας ευχαριστώ όλους πάρα πολύ για την παρουσία.
>> [ΧΕΙΡΟΚΡΟΤΉΜΑΤΑ]