Swift 如何检查 API 是否不可用
Swift how to check if API is NOT available
我仅将圆角半径应用于视图的左上角和右上角。在 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
}
}
当然在语法上是不正确的。我该怎么办?
如果您需要支持早于 iOS 11 的版本,则在函数 draw(rect:)
中使用 #available
并使用其他部分在早期版本上应用逻辑
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
}
}
更新Swift 5.6:使用#unavailable
override func draw(_ rect: CGRect) {
if #unavailable(iOS 11, *) {
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
}
}
我仅将圆角半径应用于视图的左上角和右上角。在 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
}
}
当然在语法上是不正确的。我该怎么办?
如果您需要支持早于 iOS 11 的版本,则在函数 draw(rect:)
中使用 #available
并使用其他部分在早期版本上应用逻辑
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
}
}
更新Swift 5.6:使用#unavailable
override func draw(_ rect: CGRect) {
if #unavailable(iOS 11, *) {
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
}
}