获取协议的真实类型以与存储在变量中的类型进行比较

时间:2015-08-28 17:12:24

标签: swift

我希望能够检查实现某个协议的对象的对象类型。

在下面的方法中,我希望能够遍历我的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'

有什么建议吗?

2 个答案:

答案 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