我希望能够检查实现某个协议的对象的对象类型。
在下面的方法中,我希望能够遍历我的IObject
个对象数组中的所有对象,并找到一个具有真实类型的对象,即参数中传递的类型。
func findObject(forType type: Any) -> IObject? {
for (key, value) in self.objects {
if value.Type == type {
return value
}
}
return nil
}
当我尝试编译上面的代码时,我发出了一条错误消息:'IObject' does not have a member named 'Type'
。
有什么建议吗?
答案 0 :(得分:1)
我正在使用Swift 2和Xcode 7 beta 6。
我觉得这个问题很有意思。我设法让这个工作的唯一方法是通过字符串比较 - 即if "\(object.dynamicType)" == "\(forType)"
。
另外 - 如果我已正确理解了这个问题,那么我认为该函数可能需要返回一个IObject
的可选数组 - 因为对象数组可能包含多个给定类型。
protocol IObject: class {}
class SomeObject1: IObject {}
class SomeObject2: IObject {}
let myIObject01 = SomeObject1()
let myIObject02 = SomeObject2()
let myIObject03 = SomeObject1()
let myIObject04 = SomeObject1()
let myIObject05 = SomeObject2()
var objects: [IObject] = [myIObject01,myIObject02,myIObject03,myIObject04,myIObject05]
func findObject(forType: Any) -> [IObject]? {
var result = [IObject]()
for object in objects {
if "\(object.dynamicType)" == "\(forType)" {
result.append(object)
}
}
return result
}
let result = findObject(SomeObject1)
答案 1 :(得分:0)
尝试替换此代码:
if value.Type == type
到此:
if value.dynamicType == type
如果仍然无效,请尝试:
if value.dynamicType == type.self