swift - 我可以比较Any.Type吗?

时间:2014-09-23 10:02:05

标签: ios swift

我定义了两种类型:我想定义一个函数'匹配'比较两个KeyTypePairs并返回true或false取决于键和键的匹配。

protocol KeyTypePair: Hashable {
    typealias val

    var key: String { get }
    var type: Any.Type { get }
}

public struct KeyTypePairOf<T>: KeyTypePair {
    typealias val = T

    let _key: String
    let _type: Any.Type

    public var key: String {
        get {
            return _key
        }
    }

    public var type: Any.Type {
        get {
            return _type
        }
    }

    public var hashValue: Int {
        get {
            return _key.hashValue
        }
    }

    public init(key: String) {
        self._key = key
        self._type = T.self
    }

    init<T: KeyTypePair>(property: T) {
        self._key = pair.key
        self._type = pair.type
    }

    func matches<T: KeyTypePair>(pair:T) -> Bool {
        let x = self._type == pair.type // invalid, how do I check equal types?
        return self._key == pair.key && x
    }

}

如何比较&#39;类型&#39;结构?一直很头疼。我应该使用AnyObject吗?

2 个答案:

答案 0 :(得分:2)

您想要的工具是object_getClassName(返回String)。现在,你无法直接比较类型。这感觉就像是一个缺少编译器的功能,而不是任何关于swift的深层次。您认为可以比较x.dynamicType == y.dynamicType,但目前还不行。另请参阅What is the pattern for entities and Equatable?

答案 1 :(得分:0)

我在Swift 4游乐场测试了这个

struct Foo {}
struct Bar {}

let fooType: Any.Type = Foo.self
let barType: Any.Type = Bar.self

fooType == Foo.self  // true
fooType is Foo.Type  // true
fooType == barType   // false