动态检查对象是否支持动态成员查找

时间:2019-01-29 15:14:34

标签: swift

Swift 4.2中是否有一种方法可以判断任意对象是否支持动态成员查找?

类似下面的示例。

func getName(of object: AnyObject) -> String? {
    if let object = object as? DynamicMemberLookupProtocol {
        return object["name"]
    }
    return nil
}

1 个答案:

答案 0 :(得分:1)

我认为目前尚不可能。

但是,在生产版本的swift中修复了SR-8077 Compile error when using @dynamicMemberLookup as a protocol requirement个错误(希望在swift 5中)后,我们可以采用受@dynamicMemberLookup约束的协议形式来解决此问题。 / p>

您还可以阅读here,了解为何未将@dynamicMemberLookup实施为协议:

  

我们从使它成为一种类型符合该行为的协议的方法开始。事实证明,这种行为非常类似于协议:定义通用算法是没有用的,并且存在性值仅当它们定义实现该属性隐式要求的特定下标时才有用。

     

由于上述原因和其他原因,将其定义为协议并不完全适合Swift的设计。