gpt4 book ai didi

ios - Swift:检查有一个协议(protocol)并像在 Java 中一样使用 getter

转载 作者:行者123 更新时间:2023-11-28 13:14:07 25 4
gpt4 key购买 nike

我想知道是否有可能在 swift 中检查一个类是否符合协议(protocol)。

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

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

现在在总是扩展的 EntityObject 类中(否则你会遇到 fatal error )。我想获得这条路径,但 EntityObject 不符合实体协议(protocol),但在大多数情况下它的子级符合。

示例路径 getter :

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

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

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

但是这会返回一个 Entity 实例(我猜),因为我不允许在此处使用路径或查看任何选项。

有人知道我是否可以通用地执行此操作?

最佳答案

由于我想调用的属性不是实例,而是我无法从实例中获取的 Type 属性,因此 dynamicType 属性可以让我调用。所以在我的情况下是这样。

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

这将获取路径变量作为字符串(如果存在)。制作我的整个功能:

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
}

关于ios - Swift:检查有一个协议(protocol)并像在 Java 中一样使用 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29939962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com