Twój kod celu jest nieprawidłowy. Zawodzi źle dla nil stringów. W celu C faktycznie używa się: if (myString.length) {'to łańcuch o długości}. Działa to również na ciągach zerowych. To proste i łatwe do odczytania.
Możesz także użyć isEqualToString, co przydaje się, jeśli inicjujesz var przy użyciu NSString ('var emptyString: NSString'): emptyString.isEqualToString ("")
Całkowicie przepisuję swoją odpowiedź ( ponownie ). Tym razem to dlatego, że stałem się fanem guardwypowiedzi i wczesnego powrotu . To sprawia, że kod jest znacznie czystszy.
Ciąg nieopcjonalny
Sprawdź długość zerową.
let myString:String=""if myString.isEmpty {
print("String is empty.")return// or break, continue, throw
}// myString is not empty (if this point is reached)
print(myString)
Jeśli ifinstrukcja przejdzie pomyślnie, możesz bezpiecznie użyć ciągu, wiedząc, że nie jest on pusty. Jeśli jest pusty, funkcja wróci wcześniej i nic nie będzie miało znaczenia.
Opcjonalny ciąg
Sprawdź długość zerową lub zerową.
let myOptionalString:String?=nilguardlet myString = myOptionalString,!myString.isEmpty else{
print("String is nil or empty.")return// or break, continue, throw
}// myString is neither nil nor empty (if this point is reached)
print(myString)
Spowoduje to rozpakowanie opcjonalnego i sprawdzenie, czy nie jest on jednocześnie pusty. Po przekazaniu guardinstrukcji możesz bezpiecznie użyć nieopakowanego niepustego ciągu.
@teradyl Mówiąc „nie zadziałało”, masz na myśli, że otrzymujesz błąd, masz problemy z autouzupełnianiem, czy coś innego? Powinno działać, chyba że coś się zmieniło, o czym nie jestem świadomy, ale autouzupełnianie nie zawsze wybierze właściwą wersję.
Dla mnie to nie działa currentIncident.priority?.description.isBlank. Mówi: Value of optional type 'Bool?' not unwrapped; did you mean to use '!' or '?'?. Muszę zrobić, (currentIncident.priority?.description ?? "").isBlankco sprawia, że rozszerzenia są trochę bezcelowe. Swift 4.1.
@CarstenHagemann To dlatego, że priorityjest to opcja. Gdyby descriptionbyło opcjonalne, zadziałałoby, ale nie można obejść tego, że obiekt nadrzędny jest opcjonalny w ten sposób (ponieważ jeśli priorityjest nil, to nie ma nawet descriptionwłaściwości sprawdzającej, czy nie ma pustości).
isEmpty zrobi to, co myślisz, że jeśli string == "", zwróci wartość true. Niektóre inne odpowiedzi wskazują na sytuację, w której masz opcjonalny ciąg.
Jeśli ciąg nie jest nil, zostanie użyty isEmpty, w przeciwnym razie nie.
Poniżej opcjonalny ciąg NIE zostanie ustawiony, ponieważ ciąg jest zerowy
let optionalString:String?=nilif optionalString?.isEmpty ==true{
optionalString ="Lorem ipsum dolor sit amet"}
Oczywiście nie użyłbyś powyższego kodu. Zyski pochodzą z analizowania JSON lub innych takich sytuacji, w których albo masz wartość, albo nie. Gwarantuje to, że kod zostanie uruchomiony, jeśli istnieje wartość.
iflet notEmptyString = optionalString where!notEmptyString.isEmpty {// do something with emptyString
NSLog("Non-empty string is %@", notEmptyString)}else{// empty or nil string
NSLog("Empty or nil string")}
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.