从 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 魔法一样)。它必须是明确的。
我不确定这是否可能,但我认为我以前见过。
我正在对整个应用程序中的表单对象执行一些验证,我想要一种集中的、可重用的方式来执行此操作。我想出了以下内容:
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 魔法一样)。它必须是明确的。