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 {}