• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[Swift]Problem z klauzurą where z Stringiem i nie działa sortowanie stringów w funkcji do tablic.

VPS Starter Arubacloud
0 głosów
281 wizyt
pytanie zadane 2 lutego 2017 w Android, Swift, Symbian przez Piotrinformatyk Początkujący (340 p.)

Witam :) Mam 2 małe problemy które są powiązane bezpośrednio funkcjami, więc dlatego uznałem, że je zawrzę w jednym pytaniu. Jeżeli jednak trzeba będzie rozdzielić na 2 pytania to proszę o wiadomość :) Dopiero uczę się Swifta z książki i jestem przy funkcjach. Proszę, więc o wyrozumiałość. Na koniec rozdziału "dostałem" 2 zadania.

W pierwszym do kodu w 2 linijce:

func greetByMiddleName(name: (first: String, middle: String?, last: String)) {
    guard let middleName = name.middle else {
        print("Witaj")
        return
    }
    print("Witaj, \(middleName)")
}

greetByMiddleName(name: ("Mateusz", nil, "Korniecki"))

mam dodać klauzuję where, która ma sprawdzać czy drugie nazwisko składa się z mniej niż 4 znaków. Jeżeli tak to ma się wykonać  print("Witaj, \(middleName)"). Wiem jak użyć klauzury i jak za pomocą indexu pobrać dany znak a nawet słowo (w tym 2 to tylko w princie). Niestety pokazywał jak użyć klauzury tylko z cyframi a o stringach i characterach nawet się nie zająknął. Szukałem więcej informacji w internecie i w dokumentacji, ale nic więcej o where się nie dowiedziałem niestety. Nic nie znalazłem w kontekście Swifta. Za każdym razem jak próbowałem różnymi sposobami to kazało mi zamienić where na ",". 

W drugim zadaniu natomiast muszę podzielić zakupy na dwie tabele. W jednej produkty bez fasoli a w drugiej same fasole. Zrobiłem kod tak: 

let groceryList = ["zielona fasola", "mleko", "czarna fasola", "fasola pinto", "jabłko"]
func beanSifter(groceryList: [String]) -> (beans: [String], otherGroceries: [String]) {
    var beans = [String]()
    var otherGroceries = [String]()
    for foods in groceryList {
    if foods != "fasola" {
        beans.append(foods)
    }
    else {
        otherGroceries.append(foods)
    }
}
    return (beans, otherGroceries)
}

Niestety kod nie działa tak jak chciałem.  Podobne do tego zadania było tylko kiedy pokazywał jak podzielić liczby z tabeli na liczby parzyste i nieparzyste, a tak to tylko "jednosłowe" stringi. Próbowałem to jakoś rozwikłać ale poległem niestety. Tutaj też próbowałem znaleźć informacje w internecie i w dokumentacji. Proszę chociaż o podpowiedź, a najlepiej o wytłumaczenie. Nie oczekuję oczywiście gotowca bo nie o to chodzi w nauce.

1 odpowiedź

0 głosów
odpowiedź 28 lutego 2017 przez Raymond.Z Obywatel (1,800 p.)

Cześć.

W zadaniu pierwszym kompilator dobrze Ci podpowiada. Klauzula where nie jest już używana, dlatego kompilator każe Ci ją zamienić na przecinek by dodać po prostu kolejny warunek do Twojego wyrażenia. 

Prawdopodobnie książka jest już trochę stara i nieaktualna, dlatego proszę miej to zawsze na uwadze.

Co do zadania drugiego, błąd też jest trywialny sprawdzasz czy string jest równy słowu "fasola". No niestety, żaden z tych stringów w tablicy nie jest złożony z samego słówka fasola, aczkolwiek niektóre z nich jak pewnie zauważyłeś mają faktycznie słowo "fasola" w swoim ciągu znaków. Problem polega na tym, że Ty nie chcesz string'a, który się równa słowu "fasola", tylko takie, które te słowo zawierają, a z tym już pomoże Ci funkcja contains, która jest dostępna w obiektach typu String.

 

Pozdrawiam

komentarz 1 marca 2017 przez Piotrinformatyk Początkujący (340 p.)
Uczę się z tej książki: http://helion.pl/ksiazki/programowanie-w-jezyku-swift-big-nerd-ranch-guide-matthew-mathias-john-gallagher,pswfdp.htm. Została wydana w 2015 a spolszczona jest niedawno.

Próbowałem w pierwszym zadaniu warunek  dodać, ale za bardzo mi się nie udało. Nie dość że idzie porównuje po kodach Unicode to nie gwarantuje, że pokaże Witaj, jeżeli będzie krótsze niż 4 litery. Dodałem taki kolejny warunek: name.middle! > name.first.

Co do drugiego to nie wiem za bardzo jak jej użyć. Trochę za węźle jest to opisane jak dla mnie i ciągle pokazuje mi błąd przy self.
komentarz 1 marca 2017 przez Piotrinformatyk Początkujący (340 p.)
Niestety nie wiem nadal jak rozwiązać te zadania.

Podobne pytania

+1 głos
1 odpowiedź 154 wizyt
+1 głos
1 odpowiedź 194 wizyt
0 głosów
3 odpowiedzi 562 wizyt
pytanie zadane 29 stycznia 2017 w Android, Swift, Symbian przez Piotrinformatyk Początkujący (340 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...