Подтвердить что ты не робот

Как проверить объект, ноль или нет?

Предположим, что у меня есть String как:

var abc : NSString = "ABC"

и я хочу проверить, что он равен нулю или нет, и для этого я пытаюсь:

if abc == nil{

        //TODO:

    }

Но это не работает и дает мне ошибку. Ошибка:

Can not invoke '=='with an argument list of type '(@|value NSString , NilLiteralConvertible)' 

Любое решение для этого?

4b9b3361

Ответ 1

Если abc является необязательным, тогда обычный способ сделать это - попытаться развернуть его в выражении if:

if let variableName = abc { // If casting, use, eg, if let var = abc as? NSString
    // variableName will be abc, unwrapped
} else {
    // abc is nil
}

Однако, чтобы ответить на ваш реальный вопрос, ваша проблема заключается в том, что вы вводите переменную так, чтобы она никогда не была необязательной.

Помните, что в Swift значение nil - это значение, которое может применяться только к опциям.

Поскольку вы указали свою переменную как:

var abc: NSString ...

он не является необязательным и не может быть nil.

Попробуйте объявить его как:

var abc: NSString? ...

или, альтернативно, позволяя компилятору вывести тип.

Ответ 2

Случай if abc == nil используется, когда вы объявляете var и хотите принудительно развернуть, а затем проверьте значение null. Здесь вы знаете, что это может быть nil, и вы можете проверить if != nil с помощью функций NSString от основания.

В случае String? вы не знаете, что завершено во время выполнения, и поэтому вам нужно использовать if-let и выполнить проверку.

Вы делали следующее, но без "!". Надеюсь, это очистит его.

Из apple docs посмотрите на это:

let assumedString: String! = "An implicitly unwrapped optional string."

Вы все равно можете обрабатывать неявно развернутый необязательный, как обычный дополнительный, чтобы проверить, содержит ли оно значение:

if assumedString != nil {
    println(assumedString)
}
// prints "An implicitly unwrapped optional string."

Ответ 3

Я закончил писать функцию полезности для проверки nil

func isObjectNotNil(object:AnyObject!) -> Bool
{
    if let _:AnyObject = object
    {
        return true
    }

    return false
}

Одинаково выглядит то же место работы и код!

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

var someVar:NSNumber? 

if isObjectNotNil(someVar)
{
   print("Object is NOT nil")
}
else
{
   print("Object is nil")
}

Ответ 4

Нулевая проверка действительно выполняется с ключевым словом guard в swift. Это улучшает читаемость кода, а область переменных по-прежнему доступна после проверки нуля, если вы хотите их использовать.

func setXYX -> Void{

     guard a != nil  else {
        return;
    }

    guard  b != nil else {
        return;
    }

    print (" a and b is not null");
}

Ответ 5

if (MyUnknownClassOrType is nil) {
    println("No class or object to see here")
}

Apple также рекомендует использовать это, чтобы проверять наличие изношенных и удаленных классов из предыдущих фреймворков.

Вот точная цитата от разработчика Apple:

Да. Если текущая ОС не реализует класс, то метод класса возвращает nil.

Надеюсь, что это поможет:)

Ответ 6

func isObjectValid(someObject: Any?) -> Any? {
    if someObject is String {
        if let someObject = someObject as? String {
            return someObject
        }else {
            return ""
        }
    }else if someObject is Array<Any> {
        if let someObject = someObject as? Array<Any> {
            return someObject
        }else {
            return []
        }
    }else if someObject is Dictionary<AnyHashable, Any> {
        if let someObject = someObject as? Dictionary<String, Any> {
            return someObject
        }else {
            return [:]
        }
    }else if someObject is Data {
        if let someObject = someObject as? Data {
            return someObject
        }else {
            return Data()
        }
    }else if someObject is NSNumber {
        if let someObject = someObject as? NSNumber{
            return someObject
        }else {
            return NSNumber.init(booleanLiteral: false)
        }
    }else if someObject is UIImage {
        if let someObject = someObject as? UIImage {
            return someObject
        }else {
            return UIImage()
        }
    }
    else {
        return "InValid Object"
    }
}

Эта функция проверяет любой объект и возвращает значение по умолчанию для объекта, если объект недействителен.

Ответ 7

Обычно я просто хочу знать, является ли объект нулевым или нет.

Итак, я использую эту функцию, которая просто возвращает true, когда введенный объект действителен, и false, когда его нет.

func isNotNil(someObject: Any?) -> Bool {
        if someObject is String {
            if (someObject as? String) != nil {
                return true
            }else {
                return false
            }
        }else if someObject is Array<Any> {
            if (someObject as? Array<Any>) != nil {
                return true
            }else {
                return false
            }
        }else if someObject is Dictionary<AnyHashable, Any> {
            if (someObject as? Dictionary<String, Any>) != nil {
                return true
            }else {
                return false
            }
        }else if someObject is Data {
            if (someObject as? Data) != nil {
                return true
            }else {
                return false
            }
        }else if someObject is NSNumber {
            if (someObject as? NSNumber) != nil{
                return true
            }else {
                return false
            }
        }else if someObject is UIImage {
            if (someObject as? UIImage) != nil {
                return true
            }else {
                return false
            }
        }
        return false
 }

Ответ 8

Быстрое короткое выражение:

var abc = "string"
abc != nil ? doWork(abc) : ()

или

abc == nil ? () : abc = "string"

или оба:

abc != nil ? doWork(abc) : abc = "string"

Ответ 9

Swift 4.2

func isValid(_ object:AnyObject!) -> Bool
{
    if let _:AnyObject = object
    {
        return true
    }

    return false
}

использование

if isValid(selectedPost)
{
    savePost()
}

Ответ 10

Swift-5 очень простой способ

//MARK:- In my case i have an array so i am checking the object in this
    for object in yourArray {
        if object is NSNull {
            print("Hey, it null!")

        }else if object is String {
            print("Hey, it String!")

        }else if object is Int {
            print("Hey, it Int!")

        }else if object is yourChoice {
            print("Hey, it yourChoice!")

        }
        else {
            print("It not null, not String, not yourChoice it \(object)")
        }
    }