The "is" keyword in Swift

As far as I can tell, it seems that the consensus is that the keyword isin Swift is synonymous with the method isKindOfClass.

However, I have problems with work:

//inside of a method in UITabViewController

//check if the currently selected tab is ActivityViewController
if selectedViewController is ActivityViewController {
    print("isActivity")
} else {
    print("isNotActivity")
}


//same check
if selectedViewController?.isKindOfClass(ActivityViewController) != nil {
    print("isActivity")
} else {
    print("isNotActivity)
}

When this code block was called, I made sure that I was on the tab ActivityViewController. isKindOfClasswas right, was selectedViewController is ActivityViewControllernot. Any ideas as to why this is?

+4
source share
1 answer

isand isKindOfClassare not synonymous. See, for example, there is a difference between the "is" "and isKindOfClass ()? .

In your case, however, the problem is an optional chain.

selectedViewController?.isKindOfClass(ActivityViewController)

Optional<Bool>, nil, ( selectedViewController - nil), nil .

selectedViewController?.isKindOfClass(ActivityViewController) != nil

, , true false.

if selectedViewController?.isKindOfClass(ActivityViewController) == true { ... }

.

+6

Source: https://habr.com/ru/post/1609359/


All Articles