相关疑难解决方法(0)

如果不应该,可选绑定会成功

这是我在Swift中发布的Traverse视图控制器层次结构的可能解决方案(稍加修改):

extension UIViewController {

    func traverseAndFindClass<T where T : UIViewController>(T.Type) -> T? {
        var currentVC = self
        while let parentVC = currentVC.parentViewController {
            println("comparing \(parentVC) to \(T.description())")
            if let result = parentVC as? T { // (XXX)
                return result
            }
            currentVC = parentVC
        }
        return nil
    }
}
Run Code Online (Sandbox Code Playgroud)

该方法应遍历父视图控制器层次结构并返回给定类的第一个实例,如果没有找到则返回nil.

但它不起作用,我无法弄清楚原因.标记为的可选绑定(XXX) 始终成功,因此即使第一个父视图控制器不是实例,也会返回第一个父视图控制器T.

这很容易重现:从Xcode 6 GM中的"iOS Master-Detail Application"模板创建项目,并viewDidLoad()MasterViewController类中添加以下代码:

if let vc = self.traverseAndFindClass(UICollectionViewController.self) {
    println("found: \(vc)")
} else {
    println("not …
Run Code Online (Sandbox Code Playgroud)

generics ios swift

9
推荐指数
1
解决办法
559
查看次数

标签 统计

generics ×1

ios ×1

swift ×1