Swift:Check有一个协议,像在Java中一样使用getter



我想知道是否可以检查一个类是否符合swift中的协议。

我有一个EntityObject类,它包含Java中的一些基本功能,我会将其抽象化,但由于swift不进行抽象,所以我这样运行它。

我还有一个实体协议,它需要一个路径属性的getter(它实际上并不存在,但总是在我们的API中返回路径)。

现在在EntityObject类中,它总是被扩展的(否则你会得到致命错误)。我想获得这个路径,但EntityObject不符合实体协议,但它的子级在大多数情况下都符合。

示例路径获取程序:

class var path:String {get { return "blog/{blogId}/comments" } }

getter不会使用reflect()显示在镜像中,可能是因为它是一个类(静态)var,我尝试了类似的方法:

if let entity = self as? Entity {
return entity.path
}

但这返回了Entity的一个实例(我想),因为我不允许使用这里的路径或查看任何选项。

有人知道我是否可以通用地这样做吗?

由于我想调用的属性不是实例,而是Type属性,我无法从实例中获取它,因此dynamicType属性允许我调用。所以在我的情况下,它应该是。

if let path = self.dynamicType.valueForKey("path") as? String {
return path
}

如果路径var存在,这将以字符串形式获取路径var。使我的整个功能:

func getPath() -> String? {
if let path = self.dynamicType.valueForKey("path") as? String {
return path
}
ErrorClass.log("Path not implemented on (self), does not inherit from entity?")
return nil
}

您可以检查一个类是否符合swift中的协议,如:

if myClass.conformsToProtocol(ProtocolName) {
//class conforms to protocol
}

最新更新