ios - NSArray 包含两个元素,但 myArray[0] 为 nil?

标签 ios macos cocoa cocoa-touch nsview

我正在尝试从文件加载 NIB。

我有这个代码,来自 here

protocol NibLoadable {
  static var nibName: String? { get }
  static func createFromNib(in bundle: Bundle) -> Self?
}

extension NibLoadable where Self: NSView {

  static var nibName: String? {
    return String(describing: Self.self)
  }

  static func createFromNib(in bundle: Bundle = Bundle.main) -> Self? {
    guard let nibName = nibName else { return nil }
    var topLevelArray: NSArray? = nil
    bundle.loadNibNamed(NSNib.Name(nibName), owner: self, topLevelObjects: &topLevelArray)
    guard let results = topLevelArray else { return nil }
//    let views = Array<Any>(results).filter { $0 is Self }
//    return views.last as? Self
    let element =      results[0] as? Self

    return results[0] as? Self
  }
}

结果有两个元素,一个 NSView 和 NSApplication。

这里的问题是元素为零。注释的代码也给了我 nil

我是 swift 的新手。这个 self 交付是什么,或者它在createFromNib最后一行代表什么?

最佳答案

不能保证第一个对象就是请求的 View 。

通过 first(where

获取正确的 View

并声明 nibName 是非可选的要求。

protocol NibLoadable {
    static var nibName: String { get }
    static func createFromNib(in bundle: Bundle) -> Self?
}

extension NibLoadable where Self: NSView {    
    static var nibName: String {
        return String(describing: Self.self)
    }

    static func createFromNib(in bundle: Bundle = Bundle.main) -> Self? {
        var topLevelArray: NSArray? // Optionals are nil by default
        bundle.loadNibNamed(NSNib.Name(nibName), owner: self, topLevelObjects: &topLevelArray)
        return topLevelArray?.first(where: { $0 is Self }) as? Self
    }
}

关于ios - NSArray 包含两个元素,但 myArray[0] 为 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56773345/

相关文章:

ios - 为 UIScrollView 正确定义高度

ios - 如何裁剪较大的图像以适应以编程方式构建的 tabBarController 中的 tabBar 图标。

ios - 打开功能后,iOS 9/10 中未收到 Apple 推送通知

macos - 如何发现 Mac OS X 上的“逻辑”核心数量?

objective-c - Mac OS X 崩溃日志调试 Objective C

ios - 隐藏在图像后面的容器的程序化屏幕截图

linux - Bash 文件在用于 testng 的 Windows 中运行良好,但在 linux/mac 中不起作用

macos - 如何删除 "unsupported OS"即 El Capitan Public beta 上的 MacPorts?

objective-c - 找不到实例方法 - 对于应用程序委托(delegate)属性

macos - 如何在 NSTextView 上拖动鼠标左键时检测鼠标右键按下和其他鼠标按下?