Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"hidden" vs #keyPath(UIView.isHidden)

Tags:

ios

swift

swift3

KVO observer with #keyPath(UIView.isHidden) does not work, but "hidden" works.

Very strange. Is it bug or feature?

child.addObserver(self, forKeyPath: "hidden", options: [.initial,.new], context: nil);

override func observeValue(forKeyPath keyPath: String?, of object: Any?, .change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if let view = object as? UIView, view.superview === self && keyPath == "hidden" {
        print("*");
    }
}
like image 826
john07 Avatar asked Jan 19 '17 16:01

john07


People also ask

What is the difference between visible and hidden?

visible: It is used to specify the element to be visible. It is a default value. hidden: Element is not visible, but it affects layout.

What is difference between display none and hidden?

Difference between display:none and visiblity: hidden visibility:hidden hides the element, but it still takes up space in the layout. display:none removes the element from the document. It does not take up any space.

What is the opposite of hidden in HTML?

The opposite of visibility: hidden is visibility: visible .

What is the difference between opacity and visibility?

display:none will hide the whole element and remove that from layout space whereas visibility:hidden hides an element but take up the same space as before. Opacity can be used if you want to create transparency or fade effect. Save this answer.


1 Answers

Is it bug or feature?

Let's say it's a known fact. "Renamification" means that Swift pretends that the name of an Objective-C Bool property starts with is... even when it doesn't. But the #keyPath mechanism didn't get the memo when it comes to KVO and property setter names, and property setter swizzling to implement KVO observing is purely an Objective-C feature, so you have to use the real name of the property / setter, i.e. the Objective-C name, so that communication with Objective-C works correctly for KVO observation purposes.

I've filed a bug report on it (https://bugs.swift.org/browse/SR-2415) on the grounds that Swift could behave a little smarter about this, but until the Swift gang respond, it's just something you have know and deal with.

like image 98
matt Avatar answered Oct 06 '22 01:10

matt