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

时间:2016-10-17 13:21:54

标签: ios swift generics generic-programming

我不确定这是否可行,但我我以前见过它。

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

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

    var isValid: Bool {
        return true
    }
}

我希望能够访问T的属性和方法,就像我直接对其进行子类化,而不是向RGOValidatedObject添加属性以返回T的值。请考虑以下内容:

RGOValidatedObject<String>().substringToIndex(1)

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

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

1 个答案:

答案 0 :(得分:2)

不,没有&#34;解除&#34;以这种方式转发方法的语法(尽管将来有类似功能的讨论)。您需要添加let value: T属性才能访问它。

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