如何为在 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]()
}
}
如何获取实现协议的 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]()
}
}