我正在採用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編譯代碼?它甚至不會運送它們! –
恐怕我不理解你。 –