First of all, the method has not been changed in Swift 3 .
loadNibNamed(_:owner:topLevelObjects:)
was introduced in macOS 10.8 and was present in all versions of Swift. However, loadNibNamed(nibName:owner:options:)
been reset in Swift 3.
Method signature
func loadNibNamed(_ nibName: String, owner: Any?, topLevelObjects: AutoreleasingUnsafeMutablePointer<NSArray>?) -> Bool
so you need to create a pointer to get an array of returned views.
var topLevelObjects = NSArray() if Bundle.main.loadNibNamed("CardView", owner: self, topLevelObjects: &topLevelObjects) { let views = (topLevelObjects as Array).filter { $0 is NSView } return views[0] as! NSView }
Edit: I updated the answer to reliably filter the instance of NSView
.
In Swift 4, the syntax has changed a bit and using first(where
more efficient:
var topLevelObjects : NSArray? if Bundle.main.loadNibNamed(assistantNib, owner: self, topLevelObjects: &toplevelObjects) { return topLevelObjects!.first(where: { $0 is NSView }) as? NSView }
source share