我在xcode 8.0/swift 3.0中收到一个Ambiguous use of 'children'错误,当我试图向不透明的NSTreeController.arrangedObjects对象发送消息时。
这里是一个光秃秃的操场,展示了用例:

import AppKit

extension NSTreeController {

    func whatever () {
        let k = (self.arrangedObjects as AnyObject).children // error here
    }
}

我尝试使用AnyObject作为底层objc对象的桥梁,我想它应该能够通过任何方法调用。
xcode表示它找到了两个可以响应“children”消息的候选者:Foundation.XMLNodeAppKit.NSTreeNode
当然,明显的解决方案(强制转换为NSTreeNode)不起作用,因为arrangedObjects返回不透明的代理对象,而不是真正的NSTreeNode
关于如何在Swift 3中使用NSTreeController.arrangedObjects.children有什么建议吗?

最佳答案

children属性的两个候选项的类型不同:

Foundation.XMLNode:137:14: note: found this candidate
    open var children: [XMLNode]? { get }
             ^
AppKit.NSTreeNode:12:14: note: found this candidate
    open var children: [NSTreeNode]? { get }
             ^

可以通过强制转换属性的值来解决模糊性。
到所需的类型。在您的情况下:
let k = (self.arrangedObjects as AnyObject).children as [NSTreeNode]?

关于swift - “尝试在Swift 3.0中使用NSTreeController.arrangedObjects时,模糊地使用'children'”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39660939/

10-13 06:36