“'NSOffState' is unavailable in Swift”

雨燕双飞 提交于 2019-12-22 04:47:39

问题


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!


回答1:


First ⌥-click on state you will see

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


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 { ...


来源:https://stackoverflow.com/questions/46181953/nsoffstate-is-unavailable-in-swift

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!