如何为在 Swift 2 中实现协议的子类获取包?

How to get bundle for a subclass that is implementing a protocol in Swift 2?

如何获取实现协议的 class 的包?我在这里尝试 self.dynamicType

假设我有一个可能的颜色列表,它作为键值列表存储在我的 repo 中,当 运行 XCTest 中的协议(其中 NSBundle.mainBundle() 执行不工作)?

protocol Car {
    func possibleColors() -> [String]
}

extension Car {
     func possibleColors() -> [String]{
         let bundle = NSBundle(forClass: self.dynamicType)
         if let path = bundle.pathForResource(unitName, ofType: "colors") {
             let keyValueList = NSDictionary(contentsOfFile: path) {
                  return keyValueList.allKeys() as! [String]   
             }
         }
         return [String]()
    }
}

这条线不起作用:

let bundle = NSBundle(forClass: self.dynamicType)

一个有效的方法是获取捆绑包,如果可以在不获取 class 的情况下完成,那就是一个好的答案。只是暂时找不到方法。

这个怎么样?

extension Car {
    func possibleColors() -> [String] {
        if let selfClass = self.dynamicType as? AnyClass {
            let bundle = NSBundle(forClass: selfClass)
            if let path = bundle.pathForResource("test", ofType: "colors") {
                if let keyValueList = NSDictionary(contentsOfFile: path) {
                    return keyValueList.allKeys as! [String]
                }
            }
        }

        return [String]()
    }
}