Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"'NSOffState' is unavailable in Swift"

I have an extension of NSView with a simple function called clearControllersInView() which takes all the controllers in the view and sets them to a default value (i.e. checkboxes to off, popups and combos to first menu item, textfields to empty string). I had no problems with this under Swift 3.

I'm using the current beta of Xcode 9 and updating this extension to Swift 4. The problem is in the section handling checkboxes where I'm getting the error "'NSOffState' is unavailable in Swift" when trying to set the checkbox to NSOffState:

if item is NSButton {
    let checkbox = item as? NSButton
    checkbox?.state = **NSOffState**  -- *'NSOffState' is unavailable in Swift*
}

I was getting the same error elsewhere in this program where I check the value of a checkbox. I was able to temporarily fix those instances by checking against the controllers raw value:
if checkbox.state == NSOnState -- error
if checkbox.state.rawValue == 1 -- no error

Wasn't able to find a solution by searching here or Google in general. Any help would be greatly appreciated!

like image 614
FoolOS Avatar asked Sep 12 '17 17:09

FoolOS


1 Answers

First ⌥-click on state you will see

enter image description here

The type of state has been changed to NSControl.StateValue, that's clearly an enum or a struct.

So just type . and use code completion

enter image description here


PS: if item is NSButton you can safely write

let checkbox = item as! NSButton

or still better use optional bindings

if let checkbox =  item as? NSButton { ...
like image 64
vadian Avatar answered Oct 17 '22 01:10

vadian