首先该方法尚未在改变斯威夫特3。
loadNibNamed(_:owner:topLevelObjects:)
已经在macOS 10.8中引入,并出现在所有版本的Swift中。然而loadNibNamed(nibName:owner:options:)
已斯威夫特3.被丢弃
方法的签名是
func loadNibNamed(_ nibName: String,
owner: Any?,
topLevelObjects: AutoreleasingUnsafeMutablePointer<NSArray>?) -> Bool
,所以你必须创建一个指针来获得的意见阵列上的回报。
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
}
编辑:我更新了答案,以可靠地过滤NSView
实例。
在斯威夫特4语法略有改变,并使用first(where
更高效:
var topLevelObjects : NSArray?
if Bundle.main.loadNibNamed(assistantNib, owner: self, topLevelObjects: &toplevelObjects) {
return topLevelObjects!.first(where: { $0 is NSView }) as? NSView
}
在一行上让view = topLevelObjects [0] as! NSView - 我收到错误“无法将'NSApplication'类型的值(0x7fffd8201278)转换为'NSView'(0x7fffd8210048)。” – Alex
调用此方法假定有一个包含视图的nib/xib文件作为顶级对象。 – vadian
谢谢,发现一个错误。 – Alex