2016-09-05 16 views
8

Poszukuję składni, aby dopasować do wzorca z wieloma przypadkami w instrukcji if. Przykładem byłoby to:Jak zrobić, jeśli dopasowywanie do wzorca z wieloma przypadkami?

enum Gender { 
    case Male, Female, Transgender 
} 

let a = Gender.Male 

Teraz chcę sprawdzić, czy jest .Male LUB .Female. Ale chciałbym tego uniknąć za pomocą przełącznika. Jednak instrukcja switch będzie wyglądać następująco:

switch a { 
case .Male, .Female: 
    // do something 
} 

Czy można to napisać, jeśli tak jest? Spodziewam się tego, ale to nie działa :(

if case .Male, .Female = a { 

} 
+0

Powinieneś użyć kolekcji w js Napisałbym coś takiego: 'if ([Gender.Male, Gender.Female] .includes (actualGender))'. – inf3rno

+0

Według mojej wiedzy nie jest to możliwe. Stworzyłem [prośbę o funkcję] (https://bugs.swift.org/browse/SR-4644) jakiś czas temu. – Raphael

Odpowiedz

0

Dla dopasowywania wzorców, co można opisać nie będzie jeszcze pracować. Można to zrobić w Twoim przypadku. Ale jeśli nie może być przekształcone na hashValue . Wtedy to nie będzie działać albo

// Using Pattern Matching for more than one case. 
if case 0...2 = a.hashValue { 
    print("Hello") 
} 

//Normal if else 
if a == .Male || a == .Female { 
    print("Hello") 
} 
+0

Tak, to by działało, ale nie pasuje do wzorca. Wyobraź sobie, że jest więcej niż dwa przypadki, które chcę sprawdzić. Czy w tym celu nie ma dostępnej składni? – Ben

+0

Przepraszam, źle to przeczytałem. Z tego, co wiem, nie ma wzoru dopasowania tego, co opisujesz. Ale istnieje wzorzec, który używa 'hashValue' może działać na twojej sprawie. Zaktualizuję moją odpowiedź. –

+0

Nie widzę hashValue jako opcja w tym przypadku. Może powinienem napisać propozycję, jeśli nie ma tam jeszcze składni :) – Ben

-4

należy użyć kolekcji W JavaScript Chciałbym napisać coś takiego:..

if ([Gender.Male, Gender.Female].includes(actualGender)) 
    console.log(actualGender); 

pamiętać, że nie mają pojęcia o Swift, czyli jak zrobić to samo w tym języku, więc o to istotne odpowiedź w temacie: https://stackoverflow.com/a/25391725/607033: D

EDIT: To jest Swift wersja:

if [.Male, .Female].contains(a) { 

} 
0

prosta tablica działa:

if [.Male, .Female].contains(a) { 
    print("Male or female") 
} else { 
    print("Transgender") 
} 

Jestem po prostu zaskoczony umiejętnością Swift do wnioskowania o typie. W tym przypadku liczba .Male i .Female jest płcią typu od a.

+3

Działa to tylko, jeśli wyliczenie jest "Równoważne".Wyliczenie z przypisaną wartością dla każdego przypadku nie jest, bez ręcznego wdrożenia. – rgeorge

+1

@rgeorge Zawsze możesz napisać funkcję, jeśli potrzebujesz więcej. – inf3rno

Powiązane problemy