我这样声明协议和扩展名,

protocol FooProtocol: class {

}

extension FooProtocol where Self: UIView {

    func changeAlphaToZero() {

        self.alpha = 0

    }

}


我试图像这样使用changeAlphaToZero()(仅作为示例)。

class MyClass {

    func setViewAlphaToZeroIfNeeded(view: UIView) {

        if let v = view as? FooProtocol {

            v.changeAlphaToZero() // Compile Error "FooProtocol is not a subtype of UIView."

        }

    }

}


我可以将view强制转换为“ UIView符合FooProtocol”吗?

最佳答案

我认为应该是这样的:

protocol FooProtocol {
  func changeAlphaToZero()
}


extension UIView: FooProtocol {

    func changeAlphaToZero() {

        self.alpha = 0

    }

}

关于ios - 如何将“A”转换为“A符合协议(protocol)B”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36542192/

10-14 20:01