Swift如何检查API是否不可用

JGu*_*Guo 6 cornerradius ios swift4

我将角半径应用于视图的左上角和右上角.在viewDidLoad()我有:

if #available(iOS 11.0, *) {
    view.layer.cornerRadius = 20.0
    view.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
} 
Run Code Online (Sandbox Code Playgroud)

如果iOS 11不可用,最佳方式似乎就是这样做draw(_ rect:).由于我必须在外面覆盖它viewDidLoad(),我想做以下事情

if NOT #available(iOS 11.0, *) {
    override func draw(_ rect: CGRect) {
        let maskPath = UIBezierPath(roundedRect: self.contentView.bounds, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 20.0, height: 20.0))
        let shapeLayer = CAShapeLayer()
        shapeLayer.frame = self.bounds
        shapeLayer.path = maskPath.cgPath
        view.layer.mask = shapeLayer
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,它在语法上是不正确的.我该怎么办?

Suh*_*til 14

如果你需要支持早于iOS 11的版本,那么#available在函数内部draw(rect:)使用并使用else部分在早期版本上应用逻辑

override func draw(_ rect: CGRect) {
    if #available(iOS 11, *) {} else {
      let maskPath = UIBezierPath(roundedRect: self.contentView.bounds, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 20.0, height: 20.0))
      let shapeLayer = CAShapeLayer()
      shapeLayer.frame = self.bounds
      shapeLayer.path = maskPath.cgPath
      view.layer.mask = shapeLayer
    }
 }
Run Code Online (Sandbox Code Playgroud)

  • 我期待一些不那么难看的东西 (5认同)
  • 还要考虑 ```guard #available(iOS 11, *) ...``` (3认同)