Mam niestandardowy obiekt o nazwie Field. Zasadniczo używam go do definiowania pojedynczego pola w formularzu.Swift, jeśli pozwala ocenić pomyślnie na Opcjonalne (zero)
class Field {
var name: String
var value: Any?
// initializers here...
}
Gdy użytkownik wysyła formularz, sprawdzić poprawność każdego z Field
obiektów, aby upewnić się, że zawierają prawidłowe wartości. Niektóre pola nie są wymagane, więc czasami celowo nil
do nieruchomości value
tak:
field.value = nil
To wydaje się stwarzać problemy podczas korzystania z if-let, aby określić, czy pole jest zerowa lub nie.
if let value = field.value {
// The field has a value, ignore it...
} else {
// Add field.name to the missing fields array. Later, show the
// missing fields in a dialog.
}
ustawić punkty przerwania w powyższym if-else i gdy field.value
został celowo ustawiony na zero, to przechodzi przez blok if-let, a nie inny. Jednak dla pól, których field.value
zostawiłem niezainicjowany i nieprzypisany, program przechodzi do bloku else.
Próbowałem drukowanie field.value
i value
wewnątrz bloku if-let:
if let value = field.value {
NSLog("field.value: \(field.value), value: \(value)")
}
I to jest to, co mam:
field.value: opcjonalnie (zero), wartość: zero
Więc pomyślałem, że może z opcjami, jedna rzecz jest niezainicjowana, a inna mieć wartość e z zera. Ale nawet dodanie innego, jeśli w środku if-let nie sprawi, że kompilator będzie szczęśliwy:
if let value = field.value {
if value == nil { // Cannot invoke '==' with an argument list of type '(Any, NilLiteralConvertible)'
}
}
Jak sobie z tym poradzić? Chcę tylko sprawdzić, czy field.value
jest nil
.
Nie można odtworzyć. Którą wersję Xcode używasz? –
Xcode 6 GM. Próbowałem go ponownie uruchomić, wciąż nie ma szczęścia. :( –
Czy możesz opublikować kompletny samodzielny przykład demonstrujący problem? –