fluent泛型扩展函数中的Swift模糊类型
我创建了一个通用扩展函数来执行fluent泛型扩展函数中的Swift模糊类型,swift,generics,fluent,Swift,Generics,Fluent,我创建了一个通用扩展函数来执行apply函数中的任何内容。我的问题是,我需要在所有apply调用(链中的最后一个调用除外)中显式地将$0转换为UILabel,以避免此编译错误:“表达式类型不明确,没有更多上下文”。我觉得apply扩展函数可以让我在每个apply调用中使用$0,而无需显式强制转换,但我看不出是什么 我的最终目标是使用apply函数避免将局部变量(本例中为UILabel)添加到fluent链范围之外 extension NSObject { func apply<T
apply
函数中的任何内容。我的问题是,我需要在所有apply调用(链中的最后一个调用除外)中显式地将$0转换为UILabel
,以避免此编译错误:“表达式类型不明确,没有更多上下文”。我觉得apply扩展函数可以让我在每个apply调用中使用$0,而无需显式强制转换,但我看不出是什么
我的最终目标是使用apply函数避免将局部变量(本例中为UILabel)添加到fluent链范围之外
extension NSObject {
func apply<T>(applyFunc: (T)->()) -> T {
applyFunc(self as! T)
return self as! T
}
}
class Test {
func test() -> UILabel {
return UILabel()
// Error with this-> .apply{ $0.text = "Hello" }
.apply{ ($0 as UILabel).text = "Hello" }
.apply{ $0.textColor=UIColor.blueColor() }
}
}
也许这会对你有所帮助:@SebastianOsiński你提供的东西非常有效,可以像我想要的那样被锁住。谢谢你的回答!我仍然想知道是否有可能通过使用泛型来实现这一点,也许这会对你有所帮助:@SebastianOsiński你所提供的一切都很完美,可以像我所希望的那样被锁住。谢谢你的回答!我仍然想知道是否可以通过使用泛型来实现这一点。
public protocol Apply {}
extension Apply {
public func apply(applyFunc: Self -> Void) -> Self {
applyFunc(self)
return self
}
}
extension NSObject: Apply {}