Странный Любой?как поведение AnyObject - PullRequest
0 голосов
/ 29 мая 2018

Я изо всех сил пытаюсь понять поведение следующего кода:

let a: Any? = nil
let b: AnyObject? = a as AnyObject

if let c: AnyObject = b {
    print(c)
    print("That's not right, is it?")
} else {
    print("I'd expect this to be printed")
}

При запуске на детской площадке, хотя значение равно нулю, выполняется первое закрытие и выводится следующее:


Это не правильно, правда?

Q: Как это возможно и ожидается ли это поведение?

Ответы [ 2 ]

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

Потому что <null> не nil.AnyObject - это тип, соединяющий пространство Objective-C.

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

a as AnyObject приведёт a к NSNull, так что b не равно нулю

Вы можете проверить это с помощью type(of:)

let a: Any? = nil
let b: AnyObject? = a as AnyObject

if let c: AnyObject = b {
    print(c)
    print(type(of: c)) // will print "NSNull"
    print("That's not right, is it?")
} else {
    print("I'd expect this to be printed")
}
...