【问题标题】:Implement WatchConnectivity in an iOS App that supports iOS 8.0在支持 iOS 8.0 的 iOS 应用中实现 WatchConnectivity
【发布时间】:2015-10-30 22:59:24
【问题描述】:

我当前的 iOS 应用支持 iOS 8 及更高版本。我决定实现一个手表应用程序,我希望手表和 iOS 应用程序通过 WatchConnectivity 进行通信。假设我想构建一个类来处理连接,这个类是WCSessionDelegate。为了能够在我的项目中包含该类,我必须将其包装到 @available(iOS 9.0,0) 标记中,这没关系......但是,我如何在 AppDelegate (或任何其他类中)跟踪此类的实例)??? 我不能写像

这样的东西
class AppDelegate: UIResponder, UIApplicationDelegate {
    @available(iOS 9.0,0)
    var connectivityHandler: ConnectivityHandler?

如何在应该支持 iOS 8 的项目中使用这些类?!

编辑---- 我找到了这个解决方案,但听起来并不“好”。我创建了一个动态属性,并依赖于当前系统,我返回一个实例或只是 nil...该属性显然应该是 AnyObject 类型,才能成为有效的 iOS8 参数...

var _connectivityHandler: AnyObject?
var connectivityHandler: AnyObject? {
    get {
        if _connectivityHandler != nil {
            return _connectivityHandler
        }else{
            if #available(iOS 9.0, *) {
                _connectivityHandler = ConnectivityHandler()
            } else {
                _connectivityHandler = nil
            }
            return _connectivityHandler
        }
    }
    set(value) {
        _connectivityHandler = value
    }
}

【问题讨论】:

    标签: swift apple-watch


    【解决方案1】:

    您可以将您的connectivityHandler 中的所有WatchConnectivity 函数移动到该类的扩展,并使用@availability API 对其进行屏蔽:

    import UIKit
    import WatchConnectivity
    
    class ConnectivityHandler: NSObject {
    
    }
    
    @available(iOS 9.0, *)
    extension ConnectivityHandler: WCSessionDelegate {
        func initSession() {
            if WCSession.isSupported() {
                let session = WCSession.defaultSession()
                session.delegate = self
                session.activateSession()
            }
        }
    }
    

    如果你这样做,你可以将这个类添加到你的 AppDelegate 中,它也可以在 iOS 8 中编译:

    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        var window: UIWindow?
        let connectivityHandler = ConnectivityHandler()
        ....
    }
    

    【讨论】:

    • 我知道在 stackoverflow 上不应该使用 cmets 来做这个......但是伙计......这非常整洁!我会尽快接受答案
    • 感谢您的评论 ;-)
    猜你喜欢
    • 2016-01-21
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多