Swift如何检查API是不是不可用[重复]

Posted

技术标签:

【中文标题】Swift如何检查API是不是不可用[重复]【英文标题】:Swift how to check if API is NOT available [duplicate]Swift如何检查API是否不可用[重复] 【发布时间】:2018-02-28 03:03:10 【问题描述】:

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

if #available(ios 11.0, *) 
    view.layer.cornerRadius = 20.0
    view.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
 

如果 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
    

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

【问题讨论】:

您可以使用else 部分回退到旧版本if #available(iOS 11.0, *) view.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMaxYCorner] else // Fallback on earlier versions 我无法在 viewDidLoad() 中覆盖 draw(_ rect:) 【参考方案1】:

如果您需要支持比 iOS 11 更早的版本,请在函数 draw(rect:) 内使用 #available 并使用 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
    
 

【讨论】:

我预计不会那么难看 也可以考虑guard #available(iOS 11, *) ...

以上是关于Swift如何检查API是不是不可用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 我如何检查 firebase 服务器是不是可用?

Swift: API 可用性检查

Swift: API 可用性检查

目标c检查蓝牙可用性是不是已更改[重复]

Swift - 坐标不可用:从 iOS 7 开始不推荐使用 API

如果在android中打开了移动设备或wifi,如何检查互联网是不是可用[重复]