从 swift 泛型访问 <T> 的属性和方法

Access properties and methods of <T> from swift generic

我不确定这是否可能,但我认为我以前见过。

我正在对整个应用程序中的表单对象执行一些验证,我想要一种集中的、可重用的方式来执行此操作。我想出了以下内容:

class RGOValidatedObject<T> {
    var validationPredicate: ((RGOValidatedObject<T>) -> Bool)?

    var isValid: Bool {
        return true
    }
}

我希望能够像直接继承它一样访问 T 的属性和方法,而不是添加 属性 到 RGOValidatedObject 到 return 的值T. 考虑以下几点:

RGOValidatedObject<String>().substringToIndex(1)

这就是我在 RGOValidatedObject 上访问 T 的属性和方法的意思,几乎就像我只是将 T 子类化一样。

这可能吗?如果是这样,我该怎么做?我是 Swift 泛型概念的新手,但喜欢它们的外观。

不,没有 "lifting" 语法可以以这种方式转发方法(尽管未来有几次关于类似功能的讨论)。您需要添加 let value: T 属性 才能访问它。

此问题的一个更常见的版本是构建 Observable<T>。你不能在 Swift 中使它完全透明,这样你就可以在它上面调用 T 方法(就像你可以使用 KVO 魔法一样)。它必须是明确的。