面试题答案
一键面试在iOS开发中,使用@available
语法可以优雅地处理新旧API的切换。以下是一个示例:
假设我们要获取设备的当前方向,在iOS 13之前我们使用UIDevice
的orientation
属性,iOS 13及之后可以使用UIWindowScene
的interfaceOrientation
属性。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let orientation = getDeviceOrientation()
print("当前设备方向: \(orientation)")
}
func getDeviceOrientation() -> UIDeviceOrientation {
if #available(iOS 13.0, *) {
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
return windowScene.interfaceOrientation
}
}
return UIDevice.current.orientation
}
}
代码说明:
#available
条件判断:if #available(iOS 13.0, *)
表示如果当前运行的系统版本是iOS 13.0及以上,则执行大括号内的代码。*
表示适用于所有平台(这里是iOS)。
- 获取
UIWindowScene
:- 在iOS 13及以上,通过
UIApplication.shared.connectedScenes.first
获取当前的UIWindowScene
,并将其转换为UIWindowScene
类型。如果获取成功,则返回windowScene.interfaceOrientation
,这是新API提供的获取设备方向的方式。
- 在iOS 13及以上,通过
- 旧API处理:
- 如果系统版本低于iOS 13.0,或者获取
UIWindowScene
失败,就使用旧的UIDevice.current.orientation
来获取设备方向。
- 如果系统版本低于iOS 13.0,或者获取
通过这种方式,既可以使用新API提高性能,又能保证在旧版本系统上的兼容性,同时代码逻辑清晰,易于维护。