相关疑难解决方法(0)

将类型传递给通用Swift扩展,或者理想地推断它

说你有

 class Fancy:UIView
Run Code Online (Sandbox Code Playgroud)

你想找到所有兄弟姐妹的Fancy意见. 没问题 ......

    for v:UIView in superview!.subviews
        {
        if let f = v as? Fancy
            { f.hungry = false }
        }
Run Code Online (Sandbox Code Playgroud)

所以,尝试扩展,

public extension UIView
    {
    internal func fancySiblings()->([Fancy])
        {
            return (self.superview!
                .subviews
                .filter { $0 != self }
                .flatMap { $0 as? Fancy }
                )
        }
    }
Run Code Online (Sandbox Code Playgroud)

太棒了,你现在可以

    for f:Fancy in self.fancySiblings()
        { f.hungry = false }
Run Code Online (Sandbox Code Playgroud)

太棒了.

但,

如何推广该扩展以使用任何UIView子类型?

理想情况下,扩展可以推断出类型吗?还有一个类型?

所以,像......

public extension UIView
    {
    internal func siblings<T>( something T )->([T]) …
Run Code Online (Sandbox Code Playgroud)

generics functional-programming ios swift swift-extensions

20
推荐指数
1
解决办法
1546
查看次数