这是一个错误还是我遗漏了什么? (铸造 UISplitViewController)

Is this a bug or am I missing something? (Casting UISplitViewController)

class DocumentNavigationController: UINavigationController {
    public var documentSplitViewController: DocumentSplitViewController? {
        return splitViewController as? DocumentSplitViewController
    }
}

在也实现了 UISplitViewControllerDelegate 的子类中访问它。

func primaryViewController(forExpanding splitViewController: UISplitViewController) -> UIViewController? {
    ...
    print("Before:  Split- \(splitViewController) DocSplit- \(documentSplitViewController)")
    if let docSplit = splitViewController as? DocumentSplitViewController {
        print("Cast successful")
    } else { print("Cast failed")}
    print("After:  Split- \(splitViewController) DocSplit- \(documentSplitViewController)")
    ...
}

输出:

Before:  Split- <PDF_Express.DocumentSplitViewController: 0x7fcf9050fc60> DocSplit- nil

Cast successful

After:  Split- <PDF_Express.DocumentSplitViewController: 0x7fcf9050fc60> DocSplit- nil

我的预期结果是打印语句中的 DocSplit 不是 nil。我不明白为什么函数没有正确转换,但我的本地可选绑定是。

primaryViewController 中,所指的 splitViewController 是传递给方法的那个,而 documentSplitViewController 指的是 class 的 属性。我猜他们实际上不是一回事。