Почему отличное значение nil как Any не считается нулем? [Дубликат]

Я знаю, что OP искал решение для CSS, но его легко достичь с помощью jQuery. В моем случае мне нужно было найти родительский тег <ul> для тега <span>, содержащегося в дочернем <li>. В jQuery есть селектор :has, поэтому можно определить родителя с помощью его дочерних элементов:

$("ul:has(#someId)")

выберет элемент ul, у которого есть дочерний элемент с id someId . Или, чтобы ответить на исходный вопрос, что-то вроде следующего должно сделать трюк (непроверенный):

$("li:has(.active)")
4
задан mcornell 18 November 2016 в 21:41
поделиться

1 ответ

Необязательным может быть nil. Все остальное никогда не может быть nil. Any не является необязательным. Таким образом, нет смысла сравнивать Any с nil. Тест никогда не преуспеет.

Если вы знаете, что это могут быть опции, вы должны были ввести это как Any?. Это необязательно и можно сравнить с nil. Вот простой пример:

    let s : String? = nil
    let any : Any? = s
    if any == nil {
        print("nil") // nil
    }

Как вы можете видеть, тест преуспевает.

(Тем не менее, если было бы возможно, было бы еще лучше точно напечатать вещи. )

9
ответ дан matt 19 August 2018 в 18:55
поделиться
  • 1
    Может быть, моя развертка отключена, но попытка этого не помогла мне: `` `for (_, attr) в mirror.children.enumerated () {если let propName = attr.label, пусть jsonKey = keys [propName] {если пусть nilable = attr.value как Any? {if nilable == nil {print ("never called")}}}} `` ` – mcornell 18 November 2016 в 22:50
  • 2
    Ну, если вы хотите понять специфику своего кода, вам нужно задать другой вопрос, в котором вы показываете этот код и все необходимое для его понимания (т. Е. Объявленные типы всего). Я ответил только и точно вопрос, который вы на самом деле попросили , то есть почему вы получаете это предупреждение и результат выполнения, и что потребуется, чтобы получить успешное сравнение с nil. – matt 19 November 2016 в 00:32
Другие вопросы по тегам:

Похожие вопросы: