Как проверить, является ли `Any (not Any?)` Нулем или нет в swift - PullRequest
0 голосов
/ 09 мая 2018

Я работаю с Mirror в swift, я обнаружил, что Mirror.Child очень странно, метка обнуляется, но значение кажется не обнуляемым.

public typealias Child = (label: String?, value: Any)

Я не знаю, как проверить, является ли значение ноль или нет.

let b: Bool? = true
let a: Any = b
print(a == nil) // false

У меня есть одно решение:

print(String(describing: a) == "nil") // true

но это, очевидно, не очень хорошее решение.

Каков наилучший способ проверить, является ли a нулем или нет?

Позвольте мне поставить более подробно,

let mirror = Mirror(reflecting: object) // object can be any object.
for child in mirror.children {
    guard let label = child.label else {
        continue
    }
    // how to check if the value is nil or not here ?
    setValue(child.value, forKey: label)
}

1 Ответ

0 голосов
/ 09 мая 2018

Использование if case:

Вы можете использовать if case Optional<Any>.none = a для проверки, если a равно nil:

var b: Bool?
var a = b as Any
if case Optional<Any>.none = a {
    print("nil")
} else {
    print("not nil")
}
nil
b = true
a = b as Any
if case Optional<Any>.none = a {
    print("nil")
} else {
    print("not nil")
}
not nil

Использование switch:

Вы также можете использовать шаблонный тест с switch:

var b: Bool?
var a = b as Any

switch a {
case Optional<Any>.none:
    print("nil")
default:
    print("not nil")
}
nil
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...