我正在采用WatchConnectivity,但我仍然支持无法使用此库的iOS7和iOS 8。此外,我采用WCSessionDelegate协议也不支持,但这个较旧的系统。 在ObjectiveC中,我将使用预处理指令来屏蔽此声明,并从不支持它们的版本采用协议。我如何在Swift中处理该应用程序,以便应用程序不会在旧系统上崩溃?检查Swift中的协议可用性
1
A
回答
3
我感谢@joern于采用在委托协议的建议,我在这里总结一下:
@available(iOS 9, *)
extension inArrivoHDAppDelegate: WCSessionDelegate {}
0
您可以使用类型转换描述的
is
和as
运营商检查 的协议一致性,并转换为特定的协议。检查 并转换成一协议遵循完全相同的语法 检查和强制转换为类型:的
is
运营商如果一个实例遵循的协议,如果不返回false返回true。Downcast运算符 的
as?
版本返回协议类型的可选值,如果实例不符合该协议,则此值为 nil。丧气运营商的
as!
版本迫使垂头丧气的协议类型和 触发运行时错误,如果低垂不会成功。
for object in objects {
if let objectWithArea = object as? HasArea {
print("Area is \(objectWithArea.area)")
} else {
print("Something that doesn't have an area")
}
}
0
在斯威夫特2,你现在可以使用可用性检查从他们无法使用旧系统版本的屏蔽功能。
如果您只想屏蔽部分方法,或者可以屏蔽整个函数,扩展甚至类,则可以在if
,guard
,while
语句中使用可用性检查。
下面是关于如何从比iOS9更低版本屏蔽WCSession
和WCSessionDelegate
一个例子:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if #available(iOS 9, *) {
if WCSession.isSupported() {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
}
}
}
@available(iOS 9, *)
extension ViewController: WCSessionDelegate {
func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) {
// do stuff
}
}
相关问题
- 1. Swift OptionSetType协议可用性
- 2. Swift:设置协议的可选属性
- 3. Swift协议一致性
- 4. Swift协议专用通用协议
- 5. Swift 3可比协议
- 6. 在Swift中采用协议
- 7. 通过只读属性的Swift协议可设置属性
- 8. Swift协议和协议扩展与CollectionType
- 9. 在Swift中检查是否符合协议和关联类型
- 10. Swift 3可选的绑定协议
- 11. 使用Swift协议继承
- 12. 协议继承在swift中
- 13. Swift协议实例
- 14. Swift协议和equatable
- 15. Swift隐式协议
- 16. Swift协议比较
- 17. Swift - 属性类型和协议
- 18. 未执行Swift协议属性集
- 19. 如何检查协议
- 20. 检测在头文件协议的可用性 - Objective-C的
- 21. Swift协议可以是单身吗?
- 22. Swift可选协议行为不一致
- 23. 符合协议的GMSAutocompleteResultsViewControllerDelegate Swift
- 24. Swift - 函数参数必须符合协议和检查是kindOf
- 25. 如何在uiviewcontroller中使用协议,swift
- 26. UIViewController中的present()函数的Swift协议
- 27. 什么是Swift中的“标记协议”?
- 28. 在Swift中的协议和授权
- 29. swift中的客观C协议
- 30. Swift中的超类与协议?
当然,但这可能只是在运行时使用。但是,包含和协议一致性可能只在编译时被屏蔽,但当然'is'和'as'不可用,或者任何常用工具来检查版本。 –
您正在编译最新的iOS SDK代码,因此您的应用程序已知道该接口。但是检查是在运行时执行的。或者你认为在Objective-C Xcode的情况下为每个iOS SDK编译代码?它甚至不会运送它们! –
恐怕我不理解你。 –