DANIEL Armendáriz: Witam wszystkich, Zapraszamy do rozwoju aplikacji iOS z szybkich. Jestem Dan Armendariz. Jestem precepter komputera Nauka w Szkole tutaj Inżynierii i Nauk Stosowanych. I szybkie jest rzeczywiście rodzaju języka bardzo schludny. I mam pewne plany na dzisiaj. Tak więc w ciągu następnej godziny lub tak jedziemy spojrzeć na samego iOS rozwoju aplikacji za pomocą Xcode i faktycznie jednych bardzo podstawowe, bardzo proste aplikacje. I patrząc na sposób, w jaki cię faktycznie mają te aplikacje, i budować je, a właściwie umieścić je na urządzeniu z systemem iOS. Niektóre z rzeczy, które nie będziemy patrzeć na będzie obejmować takie rzeczy jak zrobieniem aplikacji i wprowadzenie go na app store. Istnieje wiele tutoriali online, które pomoże Ci w tym aspekcie nim. Ale także dlatego, że jak część CS50, masz do przyłączenia się do rozwoju firmy Apple Zespół, Zespół programistów aplikacji CS50 jest. Jeśli jeszcze tego nie zrobiłeś, że jeszcze i jesteś związany z CS50, Polecam, że Ciebie zrobić, bo, że jest to, jak jesteś w stanie stworzyć niektóre programy w Xcode, budować je, a właściwie położyć je na niektórych urządzeniach z systemem iOS jeśli rzeczywiście mają Urządzenie iOS fizyczne. Jeśli nie masz fizycznego iOS Urządzenie to jest więcej niż dobrze. Rzeczywiście można opracować dla iOS. I Xcode ma symulator, który pozwala aby zobaczyć swoją aplikację w działania na komputerze. Ale to rodzaj jest fajną rzeczą faktycznie grać i interakcji z aplikacją od rzeczywistego urządzenia. Więc jest kilka wymagań faktycznie cały ten rozwój. Jednym z nich jest to, że trzeba mieć komputer Mac. To musi być uruchomiony 10.9.4 lub nowszej w tym celu rozwoju z szybkich. Możesz użyć wcześniej Wersja do rozwijania z Objective C dla iOS i Mac. Ale polecam, i wiele Przykłady, które my widzimy dzisiaj, korzystać 10,10 Yosemite. Więc jeśli nie zostały jeszcze zaktualizowane, jest to dobry pretekst, aby to zrobić. Teraz Xcode 6.1 to najnowsza wersja Zintegrowane środowisko programistyczne że Apple zapewnia, że ​​za darmo można pobrać poza App Store. I to polecam również uruchomić najnowszą wersję. Jeśli zdarzy ci się być uruchomione wcześniej wersja Xcode 5 i poniżej po prostu po prostu nie obsługuje szybkie ogóle. Oraz wersje beta z sześciu, które zostały wydane w okresie letnim, Popieram szybka, ale nie była liczba ogromna zmian w języku tyle tak, że kod, który jesteś będzie patrzeć na ciebie i że może znaleźć w internecie Tak naprawdę to nie skompilować poprawnie w tych poprzednich wersji Xcode. Więc jeszcze raz, jeśli nie robisz jeszcze mieć konto dewelopera Polecam udać się do developer.apple.com. Zaloguj się, utworzyć konto dewelopera i dołączyć do zespołu CS50 aplikacja rozwoju. To zapewni Państwu możliwość kompilować aplikacje i umieścić je na swoim urządzeniu. OK, więc zaczynajmy. Pierwszą rzeczą, mamy zamiar zrobić, to rzeczywiście stworzyć bardzo prosty projekt w Xcode które by pozwolić złożyć wniosek. Więc jeśli nie masz jeszcze Xcode otwarta, śmiało i otwarcie go i utworzyć nowy projekt. Specjalny ekran powitalny otworzy i daje niektóre opcje o co jest to, że chcesz to zrobić. Wystarczy powiedzieć, że chcesz stworzyć nowy projekt, nowa aplikacja. Ten pojawi się okno, przy założeniu, że używasz Xcode 6.1. Teraz, a dla Czas trwania seminarium, będziemy używać pojedyncze aplikacje widok, po prostu rodzaj zgłoszenia podstawowego na uzyskanie stopy mokre. I można rozgałęzia się na własną rękę stamtąd. Kliknij przycisk Dalej w tym momencie. Teraz tutaj jest kilka rzeczy, że może chcesz wprowadzić. Nazwa produktu nazwa projektu. W tym przypadku, jestem po prostu będzie to nazwać Seminar1 ponieważ jest to pierwszy przykład. Nazwa organizacji, w w tym przypadku jest tylko moje nazwisko. Oczywiście można go zmienić z własnym nazwiskiem lub CS50. Identyfikator organizacji, jeśli Ciebie zdarzy się, że na stronie internetowej po prostu wziąć Nazwa domeny w odwrócić, com.yourname. i nazwa produktu powinien pojawić się automatycznie po tym, jak identyfikator wiązki. Oczywiście, że jesteśmy język zamiar używać na dzisiaj jest szybki. Można, oczywiście, użyć Objective C za to, ale dzisiaj będzie szybka. A my na razie powiedzieć, Urządzenia uniwersalne, więc że działa zarówno na iPada i iPhone'a. I będziemy opuścić rdzeń Dane niesprawdzone zachować Projekt stosunkowo proste, na razie. Więc śmiało i kliknij przycisk Dalej. I to się mnie zapytać gdzie chcę, aby go zapisać. Ja po prostu zapisać go na pulpicie teraz. Dobrze, więc teraz to jest to, co będzie zdarzyć, kiedy rzeczywiście otwarte Xcode. I zauważyć, że Pierwsza rzeczą, którą zobaczyć jest to, że wykrzyknik Tożsamość podpisanie mówi nie znaleziono. I zrobił to celowo na moim komputerze i jestem mając nadzieję, że będę być w stanie rzeczywiście go naprawić, bo chcę zobaczyć, jak to będą faktycznie pracować na swoim komputerze. Śmiało i kliknij kwestii poprawek. Program zapyta, czy masz istniejącego konta Apple dla deweloperów. To jest, gdy połączenie CS50 deweloperami aplikacji ważne jest, aby nie tylko masz konta aplikację, ale masz również Zdolność do podpisywania aplikacji i umieścić je na urządzeniu z systemem iOS. To not-- kliknięcie Wydanie poprawka nie jest konieczne jeśli tylko będzie budowy i rozwoju lokalnego, całkowicie w symulatorze iOS. Ale teraz mam zamiar opracowanie i umieścić je na moim iPadzie, który będzie w stanie nadawać również. Więc chcę, aby faktycznie dodać to. I to się zapytać mnie o moje jabłko ID. Więc to będzie to. I muszę pobrać Moje strony Hasło, które jest tutaj. Więc daj mi tylko jedną sekundę, aby stwierdzić, że, i skopiuj to i wklej go tutaj. Kliknij przycisk Dodaj. To się mnie zapytać która drużyna chcę dołączyć. Mam zamiar zrobić szkołę inżynierii. Kliknij przycisk Dołącz. Ups, to błędna. Zróbmy to jedno. Mam nadzieję, że jeden będzie działać. Że jeden nadal nie działa. Kończy nam się od dobrych tutaj. OK, to trzeba pracować. Teraz zamknij to. Teraz zróbmy szkołę inżynierii, kliknij wybrać. A teraz mam nadzieję, że po Kilka sekund, can-- OK, Będę cofnąć i wniosek. O człowieku, to będzie działać. OK, spróbuję inny. Zróbmy ten jeden tutaj. Pokazy na żywo zawodzą mnie. Możemy mieć do powrotu do tak budowę całkowicie na miejscu, ale to byłoby OK w tym przypadku. Więc, podczas gdy w rzeczywistości jest to pracy, co mamy zamiar zrobić, to po prostu stworzyć bardzo prosta Witaj aplikacji Świata. Więc to jest Xcode. A jeśli nie widziałem go jeszcze, to może być trochę na pierwszy zastraszenia. Istnieje wiele szyb, nie Wiele doodads w różnych dziedzinach. Ale tak sobie sprawę, że nie ma naprawdę kilka głównych komponentów do tego środowiska programistycznego. Po lewej są wszystkie pliki które mają zastosowanie do programu lub do konkretnego projektu. Będziemy klikając wokół w niektórych z nich, a my będziemy podkreślić najbardziej Najważniejszymi w czasie. Na prawej, mamy posiada zestaw atrybutów. I wszystkie te atrybuty, nie Tafle są różne dla tych atrybutów. Szyby zmienia się w zależności Kontekst głównej treści, które dzieje się w środku. Teraz może faktycznie pokazać w średnim Ci wiele rzeczy, na przykład Twój Sam kod. A może rzeczywiście have-- kiedy Kliknięcie w serii ujęć, które jest, nawiasem mówiąc, po prostu graficzny reprezentacja użytkownika interfejs dla application-- a następnie w okienku atrybuty na bardzo daleko w prawo faktycznie zmienić. Teraz istnieje kilka innych rzeczy, które chcę zwrócić. Jakby można zwiedzić w okolicy w środowisku na własną rękę. Ale jedną z rzeczy, które są bardzo użyteczne Przycisk ten jest tutaj w prawym górnym rogu okna. Jest to przycisk, który wygląda na znacznie lewy ma pkt dwa okręgi i sortuj z dwoma strzałkami, wskazując od siebie. Jeśli przełączać się między standardowy edytor, który jest daleko lewej, jedna który jest domyślnie zaznaczona, oraz dwa koła nakładania siebie, co rzeczywiście się Widok jest podwójna szyba. I to jest w rzeczywistości będzie użyteczny dla nas kiedy musimy połączyć elementy w interfejsie użytkownika do kodu. I będziemy mówić więcej o że za chwilę. Ale sobie sprawę, że jeśli się nawet więcej, jak to szyby można uprościć widok po prostu Trochę klikając powrotem na jednego edytora. Jak na razie dobrze. Więc w zasadzie mamy kod na z lewej, z prawej atrybutów, i bez względu na to pracujemy tutaj w samym centrum. Więc tutaj Kliknąłem na głównej serii ujęć. I storyboard, znowu, jest sposób, w Xcode że rzeczywiście można utworzyć użytkownika Interfejs używając po prostu przeciągnij i upuść techniki. I tak w naszej Pierwszy wniosek ten jest dokładnie to, co mamy zamiar zrobić. Mamy zamiar zejść do bardzo daleko dolna część w prawo ekranu, która zawiera różne elementy użytkownika które można następnie kliknij i przeciągnij do tworzenia interfejsu użytkownika. Teraz wszystkie te elementy są nazywane odsłon ponieważ dostarczają one jakąś myślą. Jest widok obrazu, na Przykładem, rzeczywiście pokazać Obraz na interfejsie użytkownika. Nie ma widoku tabeli do rzeczywiście pokazać tabelę. Tak dalej, i tak dalej. Istnieje szeroka różnorodność Widoki, które można wybrać tutaj. Więc teraz jedziemy szukać na etykiecie. Możesz po prostu przewinąć wszystkich listach, że tam jest. Ale to nie szukaj bar na samym dole który ułatwia identyfikację Poglądy, że rzeczywiście Aby przeciągnąć do swojego interfejsu użytkownika. Znalazłem etykietę. Zamierzam go przeciągnąć tutaj, bezpośrednio na mojej przykładowej aplikacji. Właśnie tam w środku wygląda dobrze. I mam zamiar wpisać "Hello World!" Naciśnij Enter. Teraz mam etykietę. To nie wygląda na to centered całkiem słusznie. Tak więc mogę spróbować ponownie wyśrodkować go. Na szczęście oferuje nich prowadzi do rzeczy o wiele łatwiejsze. Mam zamiar spróbować go skompilować. Miejmy nadzieję, że rzeczywiście działa tutaj. A jeśli nie, to za chwilę to w rzeczywistości pojawia się na moim iPadzie. To właśnie tutaj. Nie jest. OK, więc to jest to. Skończyliśmy. Utworzyliśmy naszą bardzo pierwszy wniosek. Teraz oczywiście to nic nie robi. To tylko etykiety. Nie ma żadnego związku między Interfejs użytkownika i kod. Jeśli więc rzeczywiście chciał do stworzenia tego połączenia, jeśli faktycznie chciał mieć jakiś komunikacji pomiędzy elementami że istnieje na Ekran i kod pozwala nam kontrolować te elementy, a następnie faktycznie trzeba spojrzeć na samego kodu. Więc to jest to, co się nazywa ViewController.swift. Oraz, zwłaszcza w przypadku Twoje pierwsze kilka programów, to będzie coś w rodzaju Większość kodu, które enter-- będzie w niniejszym dokumencie tutaj. Jest wiele rzeczy że jest tutaj tak daleko, prawda? Jest import UI klasy zestaw, zastąpić, [? funk,?] wszystkie te różne rzeczy. I to nie do końca jasne, co jest to, że to wszystko oznacza. Warto więc zrobić krok do tyłu, poza z Xcode na trochę i spojrzeć na samego języka, szybkiej. Więc z szybka, to było w projektowanie i rozwój w Apple za około cztery rok do mojego zrozumienia. I jest kilka funkcji o tym, że są naprawdę zadbane. Przede wszystkim, to skompilowane język, tak jak C. Więc najpierw trzeba skompilować i uruchomić je zanim można rzeczywiście wykonanie kodu, które powoduje. Ale nie jest, w przeciwieństwie do C, interaktywne zapyta, że ​​rzeczywiście można uruchomić i wpisz dowolne polecenia w. I bardzo podobnie do konsoli JavaScript, które możesz znać teraz, faktycznie dokona oceny tych Polecenia i dostarczyć do Ciebie wyjście. I już nawet brane że do następnego poziomu i stworzyliśmy coś place zabaw w Xcode zwanych które pozwalają na wizualnie pracy z kodem. A my rzeczywiście zobaczyć kilka przykładów stanowi, że w tylko trochę. Jest on oparty na leży u podstaw C. C to, ponieważ wszystkie kompilatorów tworzenie kodu z C i tworzenia kodu obiektu z nim. Ale to naprawdę akcji stosunkowo niewiele składni. Będzie to wyglądało całkiem inaczej. Nie będzie pewne podobieństwa. Ale nie będą sporo różnic w porównaniu do, powiedzmy, JavaScript czy PHP. A my wskazać te w chwilę. Teraz jeden z największych rzeczy o szybkie, że miło jest to, że, zwłaszcza w porównaniu do C, to ma być bezpieczny. Wszystko w nim ma być bardzo silnie wpisane. W rzeczywistości jest to prawie denerwujące na początku, gdy po raz pierwszy rozpocząć pracę z szybkich, tylko jak wiele wymusza rodzajów wszędzie. Wszystko to ciąg musi pozostać ciąg. To jest bardzo trudne do sortowania z nawróconego go lub zmusić go do innej formie. I znowu pokażemy przykłady. Ale w końcu zrozumieć, że ta ma na celu ochronę, i przez Ciebie mam na myśli kod, z upaść w jakiś okropny sposób, gdy masz jakieś niedopasowane typu. I znowu z nim pracować. Ponieważ będzie to frustrujące w pierwszym jak spróbować dowiedzieć się, dlaczego właśnie dostajesz to niezwykłe błędu czynienia z typami. Ale będzie to warto w końcu. To zajmuje się automatyczne zarządzanie pamięcią, tak nie prawda mamy do czynienia z rzeczy jak malloc i wolne i wszystkie z tego rodzaju rzeczy. I to jest również przeznaczone do ogólników. Tak więc, możemy korzystać z Xcode do tworzenie aplikacji iOS i aplikacji Mac, możemy też po prostu użyć jako język skryptowy. I tak możemy go używać sortowania od zamiast PHP lub zamiast Pythona faktycznie szybko analizować i przetwarzać niektóre dane, które mamy na naszym komputerze. Posiada szeroką gamę nowoczesnych Cechy, opcjonalne, zmienność, leków generycznych, zamknięcia, a wiele z tego rzeczy może lub nie może rozpoznać. I to jest właśnie rodzaj niefortunne część języka, że ​​niektóre z nich rodzaj futurystycznych, nowoczesnych elementów, które zawarte są w elementy tak głęboko zakorzenione, że rzeczywiście będzie trzeba uczyć CS50.5 trochę. Musimy dowiedzieć się trochę więcej o niektórych funkcji w celu naprawdę zrozumieć, co się dzieje dalej, i tak, że można spojrzeć na kod i nie czuć się całkowicie utracone. A zobaczysz co mam na myśli przez które w zaledwie minutę. OK, więc let's-- dość tego rodzaj materiału teoretycznego. Niech spojrzy na nasze Pierwsza szybka programu. To jedna linia kodu. Linia 14 właśnie tutaj, to mówi drukowanie l n komentarzy CS50. Więc jest kilka rzeczy, które to bardzo różni się o tym porównaniu do rzeczy, że może być wykorzystane do spośród C, na przykład. Jednym z nich jest to, że nie ma intmain, nie ma to punkt, nie ma nic z tego dodatkowych rzeczy. To, jak standardowy I / O, na przykład bibliotek które rzeczywiście świadczą standardowe funkcje języka, są automatycznie dołączane jako częścią standardowej biblioteki Swift i które są importowane automatycznie. Nie musisz robić że import ręcznie. Intmain nie istnieje, ponieważ Głównym punktem dostępu do kodu jest rzeczywiście w początek kodu. Więc każdy kod, który trzeba od początku rzeczywiście będą realizowane na początku. Więc to naprawdę znacznie upraszcza. Zauważ również, że nie ma średnik. Nie ma średniki w tym języku. Możesz umieścić oświadczenie osobnej linii a następnie następny wiersz reprezentuje inne oświadczenie. Jeśli chcesz umieścić mulitiple sprawozdanie online, to trzeba oddzielić je średnikami. Jednak dla większości w dobrym stylu, jesteśmy nigdy nie zobaczymy średników na cele sprawozdania oddzielających w szybkich. Więc jak to właściwie działa? No bardzo podobnie jak C my faktycznie skompilować tego. I tak możemy to zrobić za pomocą swift c, a następnie 1.swift. A następnie po kilku minut będzie kompilacji a następnie można uruchomić pozycję jednego. I od niego po prostu powiedzieć: "Witaj CS50." Niesamowite, więc nie idziemy. Oto nasz pierwszy program Hello World. Przejdźmy do numer dwa. Teraz w this-- to się zmieniło nieznacznie, bo podczas gdy normalnie Ciebie do-- w rzeczywistości zawsze trzeba skompilować szybkiego wniosku przed tobą faktycznie uruchomić it-- jeden wspaniałych funkcji które wspomniałem wcześniej, że szybka w rzeczywistości może być stosowany w rodzaju w trybie pseudo-interpretacyjne, nie jest w rzeczywistości, jak tłumacza. Ale co to zrobi to nie jest, w rzeczywistości, szybka aplikacja że można uruchomić. Tak na przykład, jeśli chcesz wpisać szybka tutaj, co będzie jest to, że dostaniesz wiersz. I można wpisać swift Kod, wydrukować cześć, i uruchomić go. I to właściwie print-- dobrze, że nie w tym przypadku drukowania ponieważ koncentruje drukowany out, który nie jest tu widoczne. Ale jest w stanie funkcjonować. I tak w tym przypadku, jestem po prostu zamiar używać tego jako skrypt. I faktycznie mogę uruchomić ten kod tam. Tak więc sposób, że rzeczywiście uruchomić będzie nieco różne, ale zobaczysz, że za chwilę. Teraz, w tym przypadku, co mamy zamiar zrobić, to najpierw zdefiniować zmienną. Tak to jest jak zdefiniujemy Zmienna w szybkie, jest używamy słowa kluczowego let, a następnie pod nazwą zmiennej a następnie zapewniamy niektóre inicjowanie danych opcjonalnie. Więc w tym przypadku mamy do definiowania stała nazwie nazwa, i będziemy używać, że w Wyjście naszej linii drukowania Na samym dole, cześć nazwy. Zauważmy teraz, że zamiast za pomocą% s, możemy ująć nazwę tego zmienną / () i móc złączyć w treści tego ciąg w tym ciągu. Teraz w przeciwieństwie do C, łańcuch jest Rzeczywista prawdziwe wpisz szybkich. I tak to siedzi obok ints i obok podwaja się bardzo łatwo i oczywiście w porównaniu niektóre z innego Języki, które widzieliśmy. Więc to będzie faktycznie działać jak można by oczekiwać. Mogę uruchomić 2.swift. I widzimy, że moje nazwisko jest faktycznie łączone w "Cześć Dan." OK, super. Przechodząc do liczby trzy. Teraz było trochę białego kłamstwa, że Mówi się, że sposób, w jaki możemy zadeklarować Zmienne było używać słowa kluczowego let. Tyle razy, jak ewentualnie można zrobić chcesz używać pozwól, bo co to robi Jest to określa stałą. I to mówi, że może szybko zoptymalizować szybkość aplikacji ponieważ wiadomo, że zmienna ta nie ulegnie zmianie. Tak ocenia ostrożnie jeśli masz zamiar używać dla zmiennej cele zmieniając go. A kiedy masz zamiar utworzyć zmienną tylko do przechowywania niektórych danych i to jest faktycznie nie zamierza zmieniać. Więc to pojęcie niezmienności, to nie jest faktycznie się zmieni, jest ważne, nawet w daleko w definiowaniu zmiennych. Więc tutaj mamy zdefiniowane nazwy, niech imię, a w tym przypadku to stała, która jest typu ciąg, i to jest równe Dan. Tak więc podczas gdy w przed Wersja, to infers-- i "to" Mam na myśli swift-- swift wnioskuje typ danych że mamy wpisaną do zmiennej. W tym przypadku możemy być jawne. Więc potem nazwę tego zmienna ma nazwę, a następnie dwukropek. I po dwukropku my również określić typ danych. Więc nie jest to nazwa lub int string name czy coś takiego. Ale zamiast pozwolić etykietę, jesteśmy określaniu, czy to stałe lub zmienne, następuje nazwa, następnie wpisz Opcjonalnie. Więc w tym przypadku mamy do definiowania nazwa ta jest ciągiem. Mówimy jest Dan. A teraz mam innej zmiennej, w tym przypadku nazywa się to etykieta. Ale zauważ, że jest to prefiksem słowa kluczowego var. Środki słów kluczowych var że zmienna ta może zmienia się w późniejszym punkcie czas, gdzieś w kodzie może faktycznie zmienić to i to nie da nam żadnej konkretnej błąd. Możemy zrobić standardową złączenie Operator tutaj, podając znak plus faktycznie dodać nasze wymienić w tym ciągu. A potem możemy wydrukować jak widzieliśmy przed chwilą. Teraz powiedzmy, że Ciebie Aby utworzyć zmienną ale ty nie chcesz zainicjować jeszcze. Jeszcze nie chcą umieścić w niej żadnych danych. Otóż ​​trzeba powiedzieć szybka, co typ danych będzie, zanim można właściwie zdefiniować go prawidłowo. Więc w tym przypadku, gdy mamy zdefiniowane Zmienna o nazwie klasy musimy być wprost o jej rodzaju, ponieważ nie można wywnioskować po prostu patrząc na dane zainicjowany które dostarczają do niego. To daje nam błąd, jeśli Wystarczy wpisać klasy var, na przykład, ponieważ nie ma w związku z tym rodzaj. Tak więc stopień = 100. Tak, że 100 jest liczbą całkowitą, to bardzo ładnie pasuje do tego. Będzie ona nadal funkcjonować. Możemy zobaczyć, jak wtedy Można łączyć to w. Teraz może być kuszony, jeśli rzeczywiście chciał złączyć klasy do innego ciągu tekstowego, pod innym tekstem, który będzie po prostu używać tego samego operatora złączenie. I że zazwyczaj jest to prawdą. Ale szybko nie pozwoli ci pośrednio zmienić typ danych. A więc w tym przypadku jest Linia, 25, nie ponieważ klasa jest liczbą całkowitą, a nie ciąg. A więc istnieje niedopasowanie zestaw typów. Więc trzeba być jawne, kiedy chcesz zmienić te dane, jeśli chcesz zmusić tego Dane w inny rodzaj i powiedzieć: OK, chcę wziąć Ten gatunek, który jest liczbą całkowitą, i przekonwertować go na ciąg. Więc biorę stolicy Stringi wszystkie typy, można zauważyć, są aktywowane, Int, Pokój, String, tak dalej i tak dalej. Wszystkie z nich są aktywowane tak, aby ułatwić. I powiemy wykorzystać String przechodzą do klasy to. I stworzy Łańcuch z tej liczby całkowitej. A potem możemy złączyć dwa bardzo ładnie. Wszelkie pytania dotyczące tego rzeczy do tej pory? W porządku, niech pług poprzez na numer cztery. Teraz porozmawiajmy o niektórych bardziej zaawansowanych struktury, takie jak tablice i pętle. I w przeciwieństwie do C, tablice w swift nie są reprezentowane przez wskaźniki. Wskaźniki w szybkich, chociaż istnieją, zwany jak niebezpieczne wskaźników lub niektóre podobnego typu jak ten, nie są one narażone na ciebie normalnie. Tak więc bardzo trudne staje na manipulowanie pamięci bezpośrednio z komputera. Więc tablice są po prostu typ danych. A oni odwoływać przy użyciu tego rodzaju od teraz kwadratowa notacja nawiasów które dotąd. Ale jeśli rzeczywiście chcesz określenie typu zmiennej jako tablica niektóre Szczególny rodzaj, a następnie umieścić tego typu w nawiasach kwadratowych. Więc to, co mówię jest to, że Tworzę zmienną gatunki typu int tablicy. A ja ustawienie, że równe części Dane założone, co w tym przypadku 100, 0, 90, 85, który jest po prostu Kolekcja tutaj arbitralnych ocen. Teraz w tym przypadku mogę, Pamiętam, usuń typ, i byłoby w stanie go wyprowadzić oparte na zainicjowane danych. Ale jeśli usunąłem to i Musiałem ustawić go później, to chciałbym mieć pewność, że mam tam typ. Dobrze, przejdźmy dalej. Więc can-- tablice dostarczają nam wiele metod za pośrednictwem tej notacji z kropkami na ciebie to prawdopodobnie teraz znać. Tak grades.count np mówi nam dokładnie numer Elementy, które są zawarte w tej tablicy. Jeśli chcę dodać additional-- teraz zauważyć, że jest to zmienna i not-- jest zmienna i nie stała, która Oznacza to, że można zmienić zawartość tej tablicy, mogę dodać obiekty do niego. Ale nie mogę tylko powiedzieć, stopnie a następnie w nawiasach kwadratowych cztery, ponieważ będzie poza granicami błędu w tym przypadku. Jeśli chcę, aby faktycznie zmiana rozmiar tablicy, Muszę użyć metody dot append coś dodać na samym końcu. Mogę jednak zmiany poszczególne indeksy. Więc mogę używać klas Następnie kwadratowych i wsporniki zera do manipulowania to pierwszy indeks i tak dalej, jak można by się normalnie spodziewać. I mogę zrobić to samo, aby faktycznie odbierać dane z tym również. Teraz nie ma również rodzaj ozdobnego metoda robi to, stopnie plus równych a potem jeszcze indeksu, które append-- lub nie inny index-- ale inna lista, która doda tej listy do tyłu ocen. I klas będzie następnie zawierać wszystko. Ale to jakby dodatkową rzecz że jestem tylko pokazano, dla zabawy. Teraz nie ma pętli. I to jest początek, gdzie wszystko zaczyna się zmieniać trochę. Zauważ, jak jest to dla pętli różni się od pętli w C Teraz będę pamiętać, że do pętli w Swift może będzie wyglądać jak na pętli w C, ale istnieje wiele więcej przydatnych konstrukcji które zasadniczo eliminują potrzebę mieć do var i równa 0 średnik i jest mniejsza od pewnej długości tak dalej, i tak dalej, prawda? A konstrukt jest tylko jeden z nich. Na indeksie, indeks jest nowa zmienne, w tym przypadku, w zakresie. I to, co mówię jest to, że nie ma Zakres od 0 aż do ale nie w tym grades.count. Więc to kropka kropka mniej niż znak reprezentuje Zakres wartości zaczynając od zera na drodze do grades.count minus 1. Istnieje oddzielny Operator, który istnieje, co jest dot dot dot, które będzie oznacza to, że chcę, zakres zera do klas liczyć włącznie. Jednak w tym przypadku, ponieważ te tablice są zera indeks, my oczywiście nie chcę, aby przejść do Maksymalna liczba ocen. Mogę zsumować stopnie, a może po spodziewać, i wyjście wszystkich tych rzeczy. OK, przejściem. Teraz porozmawiajmy o funkcji. W celu określenia funkcji użyć słowa kluczowego funk. I znowu, w Swift trzeba być bardzo ostrożnym z typami. Dostarczyć do parametrów to definiując np nazwa parametru oraz Następnie Colin, typ danych, że można oczekiwać, że Parametr do zaakceptowania. Więc w tym przypadku mamy Funkcja o nazwie count klasy druku. Akceptuje zmienną dziennik ocen, czy raczej parametr zwany ujawniać ich. I spodziewamy się, że ujawniać ich być tablicą liczb całkowitych. Jeśli to dziennik ocen jest pusty, będziemy drukować jedną rzecz. W przeciwnym razie będziemy drukować numer gatunkowym, że rzeczywiście posiada. Teraz, jeśli chcemy, aby powrócić niektóre wartości, a następnie drogą że definicja ta jest zmienić by korzystać z tej strzałki słowa kluczowego, lub korzystać z tej strzałki signifiant. Więc jedziemy do zdefiniowania Funkcja zwana średnia. Jedziemy do przyjęcia listę numerów. I mamy zamiar wrócić podwójne, które, miejmy nadzieję, jest średnią z tej tablicy. A żeby to zrobić, aby faktycznie wyliczenia tej średniej, weźmiemy sumę, a my z Oczywiście Podsumowując wszystkie obiekty w tej tablicy. Zauważ, że nie jest nowy Styl pętli tutaj. Nie mamy się wprost o Iterowanie nad każdego elementu, ale możemy zamiast powiedzieć gatunek i dziennik ocen, znaczenie że dla każdego element, który mamy w tym, zapewniają, że element ten Zmienna o nazwie klasy. I chcę, aby coś z tym zrobić. Więc idę do sumy wszystkich tych danych i rzeczywiście powrócić podwójnego podziału. Zauważcie, ponownie tu jest Koncepcja podziału całkowitej w Swift. Jeśli chcesz podwoić podział bo chcesz po przecinku, to musisz być jawne, nie tylko o jednej stronie, dlatego, że nie będzie to pozwalają do zmuszania danych z każdej strony tego, trzeba rzeczywiście Oczywiście obie strony na język deblu tak, że jesteś bardzo wyraźnie o upewniając że robisz podwójny podział. Idźmy dalej. Więc jeśli naprawdę chcesz accept-- a więc w tym konkretnym przykładzie, jest to nadal polecenie aplikacja online. I zaczynamy zobaczyć niektóre z ograniczenia młodego języku na tym, że choć możemy dostęp za pomocą argumentów to process.arguments, to wciąż niekoniecznie najczystszym rzecz, jaką kiedykolwiek widziałem. Ale w zasadzie to zachęcam do rodzaju patrzeć na tego kodu i spróbować dowiedzieć się, co dokładnie się dzieje. Zasadniczo, co się dzieje jest to, że bierzemy listę argumentów i zostały zmuszanie ich do liczby całkowite, a następnie jesteśmy zamiar używać, jako sposób na drukowanie na średnią wszystkich naszych gatunków. Przechodząc. Teraz jest jeszcze jeden rodzaj data-- inny typ danych, zamiast tablic zwane słowniki, które są bardzo podobna do mieszania tabele lub mapy hash i jest również podobny Tablice asocjacyjne PHP. Więc mają pojęcia kluczy i wartości. I są określone także ten plac notacja nawiasów, ale różnica polega że słowniki mają wewnątrz nawiasach kwadratowych, dwukropkiem. I Dwukropek oddziela dane wpisz to jest klucz i wartość. Więc w tym przypadku, mam zamiar stworzyć Słownik przyjąć pewne stopnie. I to ma być od typu string: int, Oznacza to, że wszystkie Klucze będą ciągi, a wszystkie wartości tych Klucze będą liczbami całkowitymi. Oznacza to, że mogę a następnie odwołać się do określonych danych że chcę używać tych klawiszy, a niż przy użyciu wskaźników liczbowych jak ja miałby na standardowej tablicy. Teraz zobaczmy, tam jedna ważna rzecz że chciałbym również wspomnieć o Ta szczególna sekwencja kodu. I to jest to, że nie ma Innym rodzajem danych czy raczej nie ma to idea danych, który jest zawarte w Swift nazywa ewentualne,. A co to znaczy Opcjonalne że przyjmuje do wiadomości, że czasem nie będziemy uzyskać dane, które faktycznie oczekiwać. A więc co mam na myśli, że is-- niech przyjrzeć się tej sekwencji kodu która iteruje wszystkie argumenty, które zostały przekazane do tego kodu i stara się je przekształcić, stara podzielić na różnych ciągów ponieważ przyjmuje bardzo Szczególny rodzaj argumentu. I wtedy to będzie próbować zmusić struny, które reprezentują numery do liczb całkowitych, które są stopnie, że mogę to obliczyć. Więc w zasadzie mam zamiar skorzystać z tej funkcji split, że istnieje w Swift biblioteka standardowa. Zamierzam przejść do niego w ciąg, który chcę podzielić. I wtedy w użyciu to rodzaj składni funky, które Nie wiem, czy my będziemy dostać się do, ale być może, że rzeczywiście określić precyzyjne znak, że chcemy podzielić się. Więc co to właściwie wygląda? Rzućmy okiem na faktycznie działa ten kod. Tak na przykład, powiedzmy, że mam Quiz i mam 50 na ten temat. I mam PSETs i Mam sto na ten temat. A ja got-- istnieje inny Quiz i mam 40 na ten temat. I naciśnij Enter, a ostatecznie, co stanie się to, że, co robi podejmuje te parametry, podział struny w tych dwukropkami, uznając, że nie ma dwa elementy w każdej z nich, i to jest w zasadzie śledzenie każdego. Więc mam w moim słowniku quiz, którego Wartość ta jest reprezentowany przez liczbę 50, Mam pset, który ma wartość 100, i jednego quizu, który ma wartość 40. Następnie później w kodzie I faktycznie średnio wszystkich tych wartości oraz listę wszystkich kluczy że zwłaszcza słownika. Ale to jest ważne tak, że można zauważyć, co się dzieje, jest to, że to, co chcesz zrobić, to podjąć ten ciąg i podzielić go na tej postaci, które możemy zrobić ponownie tego podziału Funkcja przy użyciu tego rodzaju ciekawe, że istnieje tutaj składni. Tylko na razie zakładamy, że to jest OK. Przyjrzymy się więcej na ten w zaledwie chwilę. Ale teraz jest ciekawa aspekt, że faktycznie chcesz spróbować przekonwertować to ciąg do liczby całkowitej. Ale w innych językach co może się zdarzyć, że to prawdopodobnie spróbować to zrobić i albo wrócić jakiś wartownik wartość jak negatywny a może null lub coś w tym stylu. A może to po prostu spowodował błąd. I musielibyśmy następnie złapać tego błędu a następnie spróbuj zrobić coś w oparciu o fakt że tej konwersji oznacza liczbę całkowitą nie powiodło się. To gdzie ta idea z optionals przychodzi. Rzeczywiście można utworzyć typ danych jest int znak zapytania, na przykład. Oznacza to, że tej liczby całkowitej jest w istocie opcjonalne. A co się stanie, jest to, że może zawiera liczbę całkowitą, albo i nie. Może ona być w rzeczywistości ta druga Pomysł, całkowicie nazywa nill. W którym to oznacza, że ​​nie ma nie ma żadnej wartości w tym. To nawet nie jest równa zero, tam po prostu nie ma wartości. Nie ma absolutnie żadnej wartości reprezentowane. I to właśnie ta linia 71 robi. Jest to, że mówi, że ja chcesz spróbować ustawić wartość, Zmienna o nazwie klasy, równa Konwersja ciągu znaków do int. Więc wziąłem ten ciąg, To pierwsze części, czy raczej druga Składniki, ponieważ jest zerem indeksowane, to Ciąg że już podzielone. I chcę do konwersji że do całkowitej. Ale to nie zawsze może przejść normalnie, bo wyobraź sobie, co by się stało, gdyby zamiast typu Numer, ja piszę oczywiście jak asdf. To się nie uda. To nie jest w rzeczywistości będzie może przekonwertować do całkowitej jak by się spodziewać. Tak więc, zamiast kopać jakiś błąd, mamy tę ideę opcjonalne. A to oznacza, że ​​za pomocą ten znak zapytania, co mogę powiedzieć, OK, to możliwe, że mogę wziąć tego, zamieniona int, i umieścić go w zmiennej, który również int. Jeśli tak, to znaczy że udało a ta pierwsza część Blok może być kontynuowana. W przeciwnym razie, nie powiodła się. Nie ma wartości w grade-- lub raczej nie ma wartości w istniejących, i rzeczywiście trzeba spróbować obsłużyć ten błąd. Będziesz zobaczyć znak zapytania cały czas w Swift i przykładowy kod dla Swifta. A w rzeczywistości nill operatora, ten rodzaj z znakiem zapytania, część składników ewentualnych, będzie prawdopodobnie jednym z trudniejszych rzeczy do rodzaju owiń głowę jak właściwie z nim pracować. Może warto byłoby teraz. I rzeczywiście, kiedy byłem pisanie kodu do tego, pewnością zrozumiałem co się dzieje, ale złapał mnie za tak często niespodzianka kiedy uważam, że niektóre dane faktycznie nil wersja opcjonalna wersja danych, które się spodziewałem. Więc po prostu sobie sprawę, że jeśli posiadają opcjonalnie wersja trzeba rozpakować, że dane z tego pola. Więc jest to coś w rodzaju ja-- sobie wyobrazić, jeśli Ciebie mieć polu i zawiera coś. A co trzeba zrobić, jest, aby zadać pytanie, to możliwe, że w rzeczywistości to okno zawiera dane, które szukam? Jeśli tak, to wyciągnąć, że z danych i umieścić go w tej zmiennej istniejącą. Jeśli nie, to po prostu trzeba pominąć zawartość pudełka w ogóle, bo to dosłownie nie zawiera niczego. Wszelkie pytania na ten temat? OK, przejdźmy od tego Takie rzeczy z linii poleceń i zacząć patrzeć na niektóre z technologii że Xcode zapewnia nam w postaci zabaw. Więc nie ma dużo Możliwość tutaj z Swift. A jeśli otworzyć Xcode i go pyta co chcesz zrobić, można otworzyć się na placu zabaw i po prostu bawić z wielu różnych struktur i elementy języka jeszcze przed uruchomieniem dotykając iOS SDK lub Mac SDK. Więc w tym przypadku, powiedzmy, że have-- Mam stosunkowo contrived przykład tutaj, ale pokrywa się ze mną jak rodzaj z pracy przez ten przykład. Powiedzmy, że mamy wiele do zrobienia wykładników o stałej wartości, jak wiemy, że będziemy muszą zrobić wiele uprawnień kwadratowych, na przykład. Tak więc mamy zamiar podjąć jakąś wartość x, będziemy je pogodzić, mamy zamiar podjąć jakąś wartość y i mamy zamiar je pogodzić. Tak dalej, i tak dalej. Teraz możemy właściwie tylko stworzyć Moc dwóch funkcji dla tego, prawda? Więc chcemy stworzyć moc 2 funkcji. Będziemy przyjmować podwójnej. Będziemy output-- lub my będziemy powrót podwójne typu. Weźmiemy ten wynik a następnie przez dwa to, co faktycznie się wyniki, które został zainicjowany na wartość równą jeden, i pomnożyć przez x. Tak w istocie mamy tu x razy x. A tak, to możesz wtedy, jak moglibyśmy oczekiwać, weź to, uruchomić zasilanie z 2, dostarczają do niego niektóre dane, lubię 2,0. A my się zobaczyć tutaj 4,0 wyniki. Uruchom moc 2 na 3,2 i my dostać się do zobaczyć nasz wynik, 10,24. Jak na razie dobrze, prawda? Teraz myślimy, dobrze, OK. Teraz rzeczywiście trzeba zrobić wiele kompetencji 3. Więc będę skopiować wkleić cały ten kod, zmienić nazwę funkcji z moc 2 do potęgi 3, a wszystko będą identyczne, z wyjątkiem tej wartości tutaj, ten zakres, 1 ... 2. Tak więc, zamiast powtarzać pętla dwa razy, Chcę powtórzyć tej pętli trzy razy. Więc po prostu zmienić tę wartość z 1 do 3-- lub raczej od 2 do 3. Ponownie więc, ten sam kod, to jedyna zmiana. Teraz działa to również. Moc 3 zawarte w niektórych wartości 2. Dostajemy 8. Więc 2 pokrojone w kostkę. I 3,2 kostkę to 32,768. I do tej pory tak dobrze, prawda? Ale mam nadzieję, że jest to mało trochę czerwona flaga dla Ciebie na tym, że mamy teraz niektóre powielanie kodu z wyjątkiem niektórych bardzo niewielkie zmienić z jednego do drugiego. Więc to jest jakiś sposób, że może uda nam się do uproszczenia problem ten, w którym będziemy mogli rzeczywiście, w czasie pracy, dowiedzieć się, niektóre, zapewnić nam jakąś funkcję, która ma właśnie moc, że chcemy. I jest to pomysł zamknięcia, które jest naprawdę istotne w kontekście Swift oraz w wielu innych językach. Ale chyba widać jest używany bardziej w Swift ponieważ jest wbudowany w języku niż w innych będzie również języki nowożytne. Więc pomysł zamknięcia to jest, jest to, że może mieć funkcję, która jest określona być ogólna funkcji, moc ogólna wyłączone. I ta funkcja będzie akceptować wykładnik ten, że tak naprawdę chcemy stworzyć. Tak na przykład, pierwszy instancji, chcieliśmy moc 2. Więc chcemy zapewnić moc a następnie w nawiasach 2. A teraz zauważyć, co to rzeczywiście powraca. Zajmuje to wejście podkładu nazywany y to liczba całkowita i zwraca ten szalony szuka rzecz w parentheses-- nawiasach dwukrotnie, a następnie strzałka podwójna. Oznacza to, że jestem powróci funkcję. Nie chcę wracać inny typ danych, jestem w istocie powrót funkcji który ma ten parametr, który przyjmuje jako wejście i podwójne wyprowadza podwójne jako wartości zwracanej. I w rezultacie, bo teraz mam nazwie moc, przekazując jakąś wartość dla y, i tworzę ten drugi function-- zawiadomienie, że nie kolejna funkcja, która jest tworzona wewnątrz this-- co robię jest następnie można zmienić że wartość, że jedna Wartość, że się zmienił od 2 do 3, teraz sprawiają, że r. I to ustąpi. Dlatego za każdym razem, że nazywam moc of zasadniczo to co dzieje jest to, że się zwrócił funkcję. Zauważ, że tutaj mam zdefiniowane nową zmienną o nazwie placu. Mam ustawiony jest równa sile, pod warunkiem tej wartości 2 do potęgi. A co to jest funkcja wrócił. Więc kwadrat, zmienna kwadratowych, jest teraz z funkcją typu że ma this-- oops, przewiń w górę Trochę bit--, że ma ten podpis, zaakceptować podwójne i wyjście podwójne. Więc teraz to, co zrobiłem jest zasadniczo mam stworzył, że funkcja nazywa się plac przyjmuje jakąkolwiek wartość i będzie je pogodzić. Widzimy, co się dzieje na dole. Plac 3 na przykład, oznacza zamierzam wziąć wartość 3 i kwadratu go. Więc jak dokładnie to działa? Kiedy przechodzą uprawnienia z 2-- kiedy przekazać 2 do tej potęgi funkcji, ta zmienna y jest wypełniona tej wartości 2. I to jest coś w rodzaju przechowywanych w pamięci. To coś w rodzaju odbywają się w Stan gdzieś w komputerze, tak naprawdę nie obchodzi, jak lub w których na tym etapie. Ale wrócę z tej funkcji nazywa exponentiate. I znowu, to nie ma znaczenia co ta funkcja jest wywoływana, naprawdę możemy nazwać to coś, że akceptuje podwójne i zwraca podwójne, ale wykorzystuje tę wartość y wewnątrz niego. Więc nawet jeśli jest to funkcja, funkcja ta exponentiater to wróciły z powrotem do mojego Zmienna, że ​​zadzwoniłem kwadratowych, to jest w nim zawarte pojęcie o tym, co y było. I pamięta, że. Dlatego za każdym razem zgłoszę taką funkcję, że nazywa się teraz plac, wykorzystuje to. Ale oznacza to również, że mogę tworzenie innej zmiennej za pomocą inna moc. Więc mogę utworzyć zmienną kostki, na przykład, zapewnić mu moc trzech. Teraz kostki zabiorę niektóre Wartość i kostki, które i powrócić. Tak więc widzimy, że mam Wartość 8 z tym. Ale to nie ma wartości y zmianie, ponieważ są one odbędzie się w rodzaju zmiennych niezależnych. Są one przechowywane w rodzaju niezależne przestrzenie w pamięci. Więc zawsze będą kostki x do potęgi 3. I zawsze będzie miał kwadratowy x do potęgi 2, w którym Oznacza to, że plac będzie zawsze numery kwadratowych, jak oczekuję. A kostka zawsze kostkach numery, jak oczekuję. Oznacza to również, że czasami można uzyskać jakieś funky składni poszukuje gdzie masz moc w bardzo na dole ekranu tutaj, moc 5. I przejść do wyniku. Dzwonisz tej funkcji, która jest zostały zwrócone z numerem 4. I tak w zasadzie to, co wynosi od 4 do piątego mocy, możemy zobaczyć wyniki nie. U mnie do tej pory? Więc ten pomysł nazywa zamknięcie, bo to, co mamy w zasadzie robi to mamy do enkapsulacji niektóre dane into-- sortowania z załączając te dane do funkcji i jesteśmy możliwość ponownego wykorzystania tej funkcji. Teraz jednak może faktycznie składni uprościć wielką kwotę. I jest wiele możliwości w Swift dla tego uproszczenia. I to jakie Kolejne z nich rzeczywiście patrzeć. Tak 7b Na przykład, podjąć dokładnie ten sam kod. Ale teraz, a nie właściwie zdefiniować funkcję wewnątrz tej władzy funkcjonować i nadać mu nazwę, a następnie zwróci nazwę z tej funkcji, która następnie stosuje się jako część zamknięcie to, a nie jesteśmy po prostu się go uprościć. Nie potrzebujemy tej funkcji, aby być nazwane. Jest to więc pojęcie funkcja anonimowa, gdzie się da, a następnie przyjąć jako wejście, w nawiasach tutaj Zmienna x, która jest typu double. Mamy zamiar wrócić typu double. A potem słów kluczowych, n, jest Początek tej funkcji. Więc zauważyć, że wszystko znajduje się w nawiasach klamrowych a my definiowania Anonimowy funkcjonować tutaj. Wystarczy prostszy sposób definiowania dokładnie to samo. OK? Ale trzymaj się, w rzeczywistości pozwala nam Swift iść dalej i uprościć jeszcze bardziej, bo tak naprawdę nie wiemy obchodzi, że ten parametr jest nazwie żadnej konkretnej rzeczy. To może być naprawdę nazywa się niczego i możemy nadal korzystać z tego pierwszego parametru. Tak więc w rzeczywistości nie jest to specjalne Typ danych w funkcji anonimowych, nie ma to specjalna nazwa zmienne w funkcjach anonimowych które zaczynają znak dolara i reprezentują numery parametrów, zero indeksowane, dla tej funkcji. Więc jest kilka rzeczy dzieje. Tutaj mam zamiar wrócić, a następnie nawias klamrowy reprezentujący funkcję, prawda? Zauważ, że nie zdefiniowano parametrów typy lub typ zwracany. To faktycznie może być wywnioskować ponieważ podpisu o pierwotnej funkcji. Więc możemy wyeliminować że jako możliwości. Ale również można używać zera do dolara reprezentują ten pierwszy parametr, który jest przeszedł do tej anonimowej funkcji. Więc uproszczenie go jeszcze bardziej. OK? Tak daleko, tak dobrze? Teraz jest to type-- prawda Pamiętam ten znak dolara zera które widzieliśmy w tym nawiasem że widzieliśmy tylko chwilę temu w tym Swift sześć przykład? To było tutaj. Zauważ, że jest dokładnie to, co patrzymy, jest to, że przeszliśmy do tego podziału funkcji Funkcja anonimowy sprawdza pierwszy parametr aby sprawdzić, czy jest on równy symbol jelita grubego. I to jest dokładnie to, co jest dzieje, jest to, że wszystkie jesteśmy doing-- powrót Hasło jest dorozumiany w tym case-- wracamy wartość ta, gdzie jesteśmy w porównaniu Pierwszy parametr przed ta grubego charakter. I tak, że rodzaj demystifies tego. I masz zamiar zobaczyć ten konstrukt Wiele w składni Swift, więc nie miej to pamiętać, gdy jesteś rzucić okiem na to. Teraz możemy wysiąść szyny trochę i przejść bardzo fantazyjne, że pokazy nawet trochę więcej mocy Swifta. Można nawet zobaczyć niektóre W tych kodów próbek. Więc dlatego zamierzam pokazać ci tego. W zasadzie to, co możemy zrobić, to, że pierwsza wszystkim, to był rodzaj niepotrzebnych dla mnie do wdrożenia wszystkich tego moc Kod bo jeśli import Darwin biblioteka, faktycznie zawiera funkcję nazywa pow który zrobi to dla Ciebie. Więc możemy go uprościć jeszcze bardziej i Posiadamy funkcję zasilania się tylko być wspaniały jedną wkładkę, gdzie po prostu zwrócić funkcję anonimowy akceptuje dolara 0 w podstawa i jako wykładnik r. Ale możemy się naprawdę, bardzo fantazyjne, kiedy sobie sprawę, że Swift ma Dużo mocy pod maską. Wiele podmiotów, które mamy do czynienia z, oraz znaki i symbole podział i wszystkie te rzeczy, które normalnie pracy z typami danych w języku programowania, są rzeczywiście rozszerzalny w Swift. Więc co to oznacza w tym my może zdefiniować własne operatorów. Więc teraz jestem zmęczony pisania w tym wszystkim pow i nawiasy, a następnie Podstawa. Nie chcę, aby to zrobić. I rzeczywiście chcą mieć Operator, który pozwala mi tego zrobić. Więc mogę powiedzieć, że chcę Swift utworzyć operatora gwiazdę star-- przez sposób, że nie mogą korzystać z karata bo Karat jest operatorem, który robi coś zupełnie innego. Więc nie chcę, aby posortować z zderzają się z tym. A więc to, co można zobaczyć w różnych języków, w tym Python, jest jak operator star star do reprezentowania wykładniki. Więc to jest jedyny powód, Dlatego zrobiłem to. I to będzie Operator typu wrostkowy. I muszę dostarczyć do niego pewne informacje o pierwszeństwie tego Operator więc wiązanie lewe. To jak stosunkowo Wysoki priorytet w porównaniu sumowania lub mnożenia. Jest to wyższy priorytet niż wszystkie z nich. Tak dalej, i tak dalej. I wtedy zdefiniować funkcji, które faktycznie mówi, co robi operator. Więc zakładając, że mam w lewo lewa strona i prawa strona, która może być lepsza nazwa zmiennej do tego. Lewa strona dłoni i prawej stronie. Można następnie wykorzystać tę moc lewa do prawej strony i powrót tej wartości. Więc teraz jest bardzo słodki. Wszystko, co musimy zrobić, to gwiazdki 2 gwiazdki 3 a wynosi od 2 do trzeciej potęgi, i otrzymujemy wartość 8. Gwiazdki 2 gwiazdki 10 wynosi od 2 do 10th mocy, mamy 1024. Więc teraz nasza moc funkcji, , który ponownie jest inna dlatego, że cała idea tego było to, że mamy jedną funkcję, która zawsze ma jakąś wartość i czy raczej mnoży it-- zajmuje wykładnik dla tej samej mocy. Więc teraz jest to jeszcze prostsze. Więc teraz to tylko dolar zaloguj 0 star star y. Nawet nie trzeba używać pow więcej. OK, kto stracił? Czy robimy dobrze? Wszelkie pytania dotyczące tego materiału? Tak? PUBLICZNOŚCI: Gdy you-- [niesłyszalne] Moc funk y dwukrotnie. Więc kiedy jesteś powrocie funkcji. DANIEL Armendáriz: Funk moc y dwukrotnie. O tak, nie wiem, co y liczby są. Przepraszam za to. PUBLICZNOŚCI: Dlaczego powrót Funkcja [niesłyszalne] obudowa. Dolar zera nie jest gwiazdą gwiazda y [niesłyszalne] okaże się, że z tym operatorem powrót dwukrotnie [niesłyszalne] dwukrotnie? DANIEL Armendáriz: Więc niech mi odpowiedzieć na to pytanie jak ja to rozumiem, a możesz mi powiedzieć, jeśli nie rozumiem pytanie. Więc ten konstrukt, nawias klamrowy Znak dolara zera star y, jest funkcją. I przyjmuje parametr, który jest reprezentowane przez ten znak dolara zera. Hasło powrotu jest domniemanych w tym bardzo krótka, anonimowa funkcja składni. Co oznacza, że ​​w istocie co to mówi jest to, że jestem definiowania function-- a następnie będę po prostu nazwać to something-- gdzie mam trochę wartość y. Mam y, która jest podwójna. I wracam dwukrotnie. A ja mam w tym powrocie y-- przykro, Nie powinienem nazwał to y-- x. Ojej, ojej, ojej. X-- nope-- star r. Więc jest to tylko uproszczona wersja tego. I tak dlatego, że mam dolara Znak zerowy jest, że za pomocą tej obudowy Oznacza to, że nie mam już wpisać pow, albo już nie Muszę coś zrobić jak 3 star 2. Mogę tylko mieć pojedynczy Funkcja o nazwie square która zawsze będzie miała niektóre wartości na wejściu i rzeczywiście powrócić na plac, który. Tak więc cała celem zamknięcia jest po prostu rodzaj symbolizować fakt, że zawsze chcesz używać y gdy Ja nazywam tę funkcję jako moc Podejmując tę ​​wykładnik. Więc wracając następnie, funkcja, która przyjmuje podwójne, który jest podstawą, a powrót wynik tego wykładnikiem jest kluczem tutaj. I to jest ważnym wyróżnieniem. Był tylko trochę rozmachem. To nie jest inaczej w porównaniu z wcześniejszymi przykładami ale to był tylko trochę faktycznie możemy rozwijać stworzenie operatora w Swift i faktycznie rzeczy z nim, co jest raczej chłodnym rzeczy. Czy mogę odpowiedzieć na to pytanie? Słodkie. Coś jeszcze zanim ruszymy dalej? OK. Teraz ten rodzaj błaga Pytanie jest that-- również OK, teraz mamy zdolność do Funkcje zostać zwrócone. Możemy również przekazać funkcje jak dane lub jako parametry do innych funkcji? A w rzeczywistości możemy. Więc powiedzmy, że mamy wszystkie w tym samym kodzie. Mamy zmienną kwadratowy że będzie pogodzić ten kod. I mamy zmienną kostki że będzie kostka jakieś dane. A my naprawdę chcemy zastosować szerokiego zakresu numerów. Więc co możemy pokusić się zrobić, Oczywiście, co jest z pewnością ważne, jest w celu przechodzenia do tej listy numerów i stosować moje funkcje kwadratowe i kostki i dostać dwa nowe listy jak wyniki że są to oryginalne lista kwadratu i pokrojone w kostkę, odpowiednio. Całkowicie dopuszczalne. Ale co jest rzeczą, Widzimy tutaj, że mamy, ponownie, powielanie naszego kodu. I nie ma chyba szansę dla nas do uproszczenia tego trochę. Co zrobić, jeśli nie było to dla nas sposób rzeczywiście zawsze iteracji przez jakiś listę i po prostu przejść do tego magicznego funkcjonować zmienną, która oznacza funkcję że chcemy zastosować do każdego elementu w tej liście. Pojawi się pojęcia, co nazywane są wyższe funkcje rzędu. I to jest w zasadzie to, co w tym jest to, że można utworzyć funkcję. I w tym przypadku to się nazywa mapper, tak aby nadać mu nazwę, po prostu Mapowanie nad każdym Pojedynczy element na liście. Gdzie zabrać listę i biorę funkcję. I to funkcja, oczywiście, ma pewną podpis. Przyjmuje za podwójnym parametrem i to będzie wyjście jest podwójna. I cały wynik Ta funkcja będzie będzie nowa lista, która jest typu double. OK? I co mam zrobić jest, aby zastosować tę funkcję f do każdego elementu w moim liście. I reply-- i raczej powrócić nowa Lista w wyniku, co jest naprawdę fajne. Teraz mogę przejść funkcje wokół. I ten pomysł wyższego rzędu funkcji jest naprawdę ważne. I to jest naprawdę tylko mapper Realizacja tego biedaka funkcji, która jest zbudowana do Swift zwany mapę. I robi właśnie to, być może nawet nieco lepiej. To jest po prostu swego rodzaju ogólny, Uproszczona wersja, że pozwala nam zobaczyć pojęcie, które odnosi się tutaj. Teraz spójrz na sposób, że może faktycznie zastosować mój plac i moje funkcje kostki do tej listy numerów. Prowadzę mój mapowania. I dostarczyć do niego moją listę numerów. I dostarczyć do niej na Funkcja, która będzie stosuje się do każdego z tych indeksów. I to ma być wyświetlania wyniku. A ja się zobaczyć, że mam do kwadratu i pokrojone w kostkę moje numery w wyniku. I oczywiście zajmie mapper każdy rodzaj funkcji anonimowej. Możemy nawet zobaczyć, że stworzyłem Nowa funkcja anonimowa, że po prostu ma jakiś parametr i dzieli się przez 2. I widzimy, że mam w rzeczywistości, podzielić moją listę o 2 zamiast. Fajne? Tak daleko, tak dobrze? Dobra, teraz niech wrócić do tego pomysłu. Miejmy wdrożenia tej plecy kontekście Dziennik ocen. A jeśli to zrobić, możemy zobaczyć, że mogę stosować wiele z tych options-- lub wiele z tych wyższe funkcje zamówienie rzeczywiście uprościć moją zdolność do wiele rzeczy na list numerów. Tak na przykład, jeśli wziąć listę numerów, jeden z wyższymi funkcjami rzędu że istnieje nazywa się zmniejszyć. Co robi, a zmniejszyć niż mapie, zmniejsza się będzie wziąć dwa elementy na liście, zajmie trochę funkcji, które porównuje dwa elementy lista, i będzie to rodzaj output-- Wyjście tej funkcji będzie kolejnym elementem, który można następnie porównać do innych. Więc można to wykorzystać, aby właściwie suma liczb znajdujących się na liście. Na przykład, jeśli miał Lista 1, 2, 3, 4, 5, Ci podjąć pierwsze elementy, 1 i 2. Można stosować do niego dodatku funkcja, która bierze te dwa elementy i wypluwa jeden z tych elementów, która byłaby wartość 3. Następnie bierzemy tę wartość 3 w przyszłym element listy suma tych dwóch, a następnie iść dalej w dół listy. Jesteśmy redukcji listy do jednej wartości. A tak się składa, że symbol plus jest operatorem, podobnie jak przed chwilą widzieliśmy. Ten operator jest faktycznie funkcja ma dokładnie tę listę, że chciał, a te właściwości które chcemy. Więc zachęcam do spójrz na to. Chcę, aby posortować w ruchu na niektórych z tym kodem tak, że rzeczywiście możemy spojrzeć na niektóre rzeczywiste, realne, prawdziwe Swift w Xcode, w rozwoju iOS. Ale spójrz na to i zobacz, czy możesz analizować poprzez to, co się dzieje niektóre z tych wyższego rzędu funkcje, łącznie z filtrem, zmniejszyć, a nawet będziesz zobacz gdzieś tutaj, map, jak również. To właśnie tutaj. Gdzie to zajmie sekwencję z klas i będzie naprawdę map je za pomocą konstruktu przełącznika, które można rozpoznać z C, ale w rzeczywistości jest dużo więcej potężniejsze niż konstruktu przełącznika że mamy w C I będziemy stosować, że do Każdy element listy i rzeczywiście świadczą List każdej klasy z tych klas z wykorzystaniem wszystkich tych pojęć że niedawno mówił o wcześniej. Teraz wystarczyło tylko ominąć minut i mówić o elemencie. I tak elemencie są oczekiwania, że ​​w C mogli określić nowy typ danych. Structury istnieje w Swift. I tak robić wiele innych konstrukcji zwane teksty stałe i klasy, które naprawdę w życie tej koncepcji do zupełnie inny poziom. I w zasadzie to tylko sposób zdefiniowania nowego typu danych. Więc jeśli get-- jeśli się całej klasy lub elemencie lub teksty stałe, Nie należy się martwić o to. To jest po prostu sposobem definiowania niektóre nowe szczególności rodzaj danych. I to jest bardzo ważne, gdy mówimy o rozwoju aplikacji iOS bo wszystko, istnieje w aplikacji iOS jest w istocie przedmiotem pewnego rodzaju. A celem jest w zasadzie klasy lub enum lub struktury. Więc w tym przypadku jestem zdefiniowania nowego typu danych że dzwonię oceny to pewne właściwości, w tym Nazwa i kolejność klas. Więc jeden rodzaj oceny że mogę mieć na uwadze, byłoby quizy, np. Nie chcę mieć ocena, że ​​był quiz i miały różne stopnie wiąże się z tym, do quizu jeden, quiz dwa, tak dalej, i tak dalej. A może mam inny typ opodatkowania zestawów problemowych. I mogę robić rzeczy. Mogę rzeczywiście Funkcje w tym rodzaju danych, które są obecnie zwane metody. Więc jeśli kiedykolwiek zobaczyć Metoda słowo, to naprawdę jest tylko funkcja, która dotyczy do bardzo konkretnej klasy, lub bardzo specyficznego typu danych. To pozwala nam modyfikować dane wewnątrz. Więc innymi słowy, jeśli chcę dodaj do mojej oceny stopnia, to wszystko, co musisz zrobić, to do dołączyć ocenę, że został wprowadzony do tej funkcji do moja własność wewnętrzna. Jest jeszcze jeden zgrabny konstrukt tutaj w Swift, który jest w tym dot dot dot operatora, co oznacza, że ​​wyniki mogą teraz przyjąć dowolną ilość liczb całkowitych. A wyniki będą wartości całkowitych zostały przekazane do mojej funkcji, które Oznacza to, że można zrobić takie rzeczy. Mogę nie dodać stopnie i po prostu zapewnić dowolne liczby całkowite są w nim i rzeczywiście mieć tablicę z tych wartości w mojej funkcji lub w moim sposób, jak to dzieje. Teraz jest to ważne, ponieważ wszystko w Xcode, wszystko w iOS, jest w istocie obiektem. Miejcie to na uwadze, kiedy biust otwarty Xcode i przejść od razu poza iOS Dwa i trzy wersje i rzeczywiście przejść do wersji czwartej. I znów wszystko będzie być umieszczane na stronie seminarium. iOS cztery jest rodzaj pełnowartościowy realizacja bardzo podstawowym aplikacji. A co ta aplikacja robi to go ładuje UI, który wygląda tak. Ponownie, jeśli klikniemy na storyboard możemy zobaczyć, że jest to, jak to wygląda. Jest to interfejs użytkownika. Posiada tytuł na samej górze. Zadzwoniłem go galerii internetowej. W środku nie ma elementów nazywa widok UI obrazu. A na dole nie ma pasek narzędzi za pomocą jednego przycisku, który ma elastycznych przestrzenie, które pozwalają go do Centrum w środku tego paska. A co się dzieje, jest to, że gdy obciążenia pobiera plik JSON, który jest zawierał on serwera w innym miejscu, analizuje ten plik JSON, i plik JSON wygląda trochę jak ten. Plik JSON wygląda tak. Nie jest. Ma nazwę albumu i posiada tablicę ze zdjęć. Każde z tych zdjęć ma imię, a także URL się, że stanowią jpeg wersja tego pojedynczego zdjęcia. Więc co się stało jest to, że gdy ten program Obciążenia, pobiera plik JSON, analizuje go, stawia wszystko na odpowiednik tablicy w iOS Aplikacja rozwoju, który jest NSArray. A potem można następnie załadować dane do aplikacji i załadować go na ekranie. Jest to obraz, który został załadowany za pomocą przycisku na samym dole. Gdybym kliknij Pobierz następnego zdjęcia, następnie ciągnie, że obraz z internetu i zastępuje ten obraz w widoku interfejsu obrazu. Więc możecie pobrać ten i faktycznie spójrz na niego na komputerze. I zbudować go i faktycznie skompilować go na urządzenie. Ale w istocie proces był tym, stworzyć storyboard-- czy raczej nie create-- ale wybrać storyboard. I rzeczywiście we'll-- jeśli nie mind-- weźmiemy tylko kilka sekund rzeczywiście pokazać, jak to się stało. Wystarczy więc, że, jak to możliwe w rzeczywistości osiągnięcia tego celu jest nieco bardziej widoczne. Jeden wniosek widok, jestem Zadzwonię do tego seminarium czterech reprezentujących ten szczególności liczbę. Zapisz go na pulpicie. OK, będzie kliknąć w serii ujęć. I co mam zrobić jest znaleźć mój widok obrazu, przeciągnij go na mojej użytkownika Interfejs i centrum to. Teraz tylko skupiając ją niestety Nie ma zamiar zrobić dużo, wyjątkiem ekranu to jest dokładnie ten rozmiar. Tak więc możemy przekonać się o tym przez podwójne kliknięcie na tym okręgu rzeczy, obniżenie to pop się menu tutaj i zmiany podgląd, gdzie my będziemy rzeczywiście dostać szansę zobaczyć, jak będzie to w rzeczywistości patrzeć na innych urządzeniach. Jak widać, nie wiemy nawet, zobaczyć go na tym konkretnym przypadku. Więc mam zamiar zamknąć to teraz. I mam zamiar wybrać ta ikona w dół na bardzo dolna część ekranu. Mówi Rozwiąż Auto problemów dotyczących układu. Niestety, nie jest to obcięte na dole. Ale jeśli klikam na to, co ja Czy to się pop up-- odejść. Co mi się to, że pop-up pozwala mi na dodanie brakujących ograniczeń. A tym, że to będzie to rodzaj zablokować w część środkową Ekran jak ja może się spodziewać. Teraz, aby dostać się na ten przycisk na Najwięcej z nich, muszę iść do redakcji. Idź do Osadza się i kliknij Kontroler nawigacyjny. Co to zrobi to, że doda cały ten drugi składnik do niego, ale faktycznie odwołuje go z powrotem do mojej oryginalnej UI. A szczegóły, znowu, my nie naprawdę trzeba dbać o teraz. Ale chcę mieć Pasek na samym dole. Więc sprawdzę Pokazy Toolbar. I to stanowi w moim zdaniem, który jest teraz gdzieś indziej, widzimy to związane tutaj. Teraz zapewnia pasek narzędzi na dnie mojego UI. Więc teraz, zamiast wybierania Widok obrazu, można znaleźć etykietę, czy raczej toolbar-- Zobaczmy, gdzie to jest? Jak to się nazywa? Poz button-- bar-- item-- sorry-- bar poz przycisk. Plop że i stosować kilka od elastyczne przestrzenie po obu stronach faktycznie centrum tego. Więc teraz stworzyłem moje UI, w zasadzie. I mogę dać mu nazwę, podwójne kliknięcie na samej górze tu i mówiąc galerię internetową i tak dalej. Teraz znowu, są elementami które istnieją same z siebie. A ja mam się połączyć je do mojego kodu, który Mogę zrobić ponownie przynosząc się tym podwójnym ikonę koła, zmiany z podglądu. Który, nawiasem mówiąc, teraz możemy zobaczyć, jest ładnie na środku i będzie dobrze wyglądać na różnych urządzeniach. Przełączyć na tryb automatyczny, który będzie wywołać kod ViewController. A teraz ta część jest ważna. W celu, aby połączyć te dwa elementy, kod do interfejsu użytkownika, wybrać element, który chcesz się połączyć. Tak więc w tym przypadku rzeczywiście chcesz zakodować zmienić obraz, który jest zawarty w tym widoku interfejsu obrazu. Więc jeśli kontrolować kliknięcie Widok obrazu i przeciągnij, zauważysz, że masz mały bar, kiedy puścić wszystko to pop pojawią się. I mówi, że będzie utworzyć połączenie. I tutaj chcę dać go Nazwa, coś galerii. Naciśnij Enter. I to rzeczywiście zapewnia Zmienna o nazwie Galeria które można następnie odwoływać w kodzie aby zmienić, na przykład. Więc jak to, że kod faktycznie wygląda? Cóż znowu, ja nie chcę spędzać zbyt dużo czasu na to. I zachęcam do pobrać go i spójrz. Ale jednym z najbardziej Ważnym aspektem jest kod faktycznie pobiera obraz. Więc w tym przypadku chcę aby w ramach moich zdjęć Tablica, która jest zawarta w moim klasy. Chcę zdefiniować nazwę i adres URL który został przeanalizowany z tego JSON. Właściwie zwrócić urządzenie, aby uzyskać Adres URL, aby pobrać URL z tego, a następnie pobrać dane z zawartość tego adresu URL. Następnie przekonwertować dane na obraz przez przekazanie go do obrazu UI. Więc jeszcze raz, wszystko to są różne rodzaje obiektów, na różne klasy. A potem można następnie ustawić moje gallery.image równa tych danych. I to jest rodzaj mięsa o tym, że w rzeczywistości jest to w stanie zmienić zmienić dane from-- obraz z jednego do drugiego. Więc jeszcze raz, mam nadzieję, że teraz Wiele z konstruktów będzie trochę więcej sensu. Zauważ, że istnieje jakiś wykrzykniki tutaj. Te wykrzykniki są głównie związane z optionals. Co mam w zasadzie powiedzieć, że nawet bez kontroli aby sprawdzić, czy nie ma danych w ramach tego opcjonalne, Mam zamiar iść do przodu i przyjąć, że istnieje i rozpakowanie go. Pamiętaj, że użyliśmy analogii rodzaj opakowania dla optionals i musimy rozpakować Pakiet i wyciągnąć dane z. Wykrzyknik Siły, które rzeczywiście się zdarzają. Ale wiem, że to jest bezpieczne, bo sprawdzone aby sprawdzić, czy dane zdjęcie jest równa do zera, mam faktycznie sprawdzić aby sprawdzić, czy opcja był w rzeczywistości nie powiodło się. Gdyby to, w rzeczywistości, nie powiodła się już. A więc jestem pewien, że raz mogę to Punkt Śmiało mogę rozpakować te dane. Możesz również zobaczyć go w forma znakiem zapytania. Jeśli więc przewinąć w dół do miejsca, gdzie trzeba właściwie analizować dane. Więc nie zniechęcaj się ten rodzaj długich nazw. Można znaleźć w Apple strona deweloper dużo odniesień do wszystkich Cele i wszystkie procesy że w rzeczywistości było to możliwe. Ale zauważ, że jest to w istocie Funkcja gdzie przekazać mu jakieś dane. I wrócę jakieś dane. I trzeba to wykorzystać jako słowo kluczowe do przekształcić go w tym NSDictionary? Co jest znowu, opcjonalnie NSDictionary. Które następnie muszą sprawdzić, czy istnieje. Więc mogę używać, jeśli pozwól udane równi analizowany, wtedy wiem, że opcja rzeczywiście zawiera jakieś dane. Albo to, co zrobiłem tutaj było po prostu założyć, że jeśli nie było żadnych błędów, które w rzeczywistości jest on bezpieczny. Dobrze, chcę podziękować wszyscy bardzo za przybycie. Wiem, że to było dużo, ale to była tylko godzina rozmawiać o niektórych dość zaawansowane rzeczy. I tak mam nadzieję, że dostaniesz szansa, aby pobrać cały kod i weź lepiej, dokładne spojrzenie na niego. Rodzaj przekonać się o wszystkim z rzeczy, które się dzieje. I chcę podziękować wszystkim, znowu, za przybycie. Powodzenia w swoich ostatnich projektów. Miłego dnia.