Класс WKExtension
в WatchOS 2 автоматически предоставляет единый объект расширения для каждого расширения, чтобы управлять поведением, которое является общим для всех интерфейсных контроллеров вашего приложения. Apple Documentation отмечает, что вы «используете объект расширения для выполнения задач на уровне приложения, таких как открытие URL-адресов и получение корневого интерфейса вашего приложения».
Как и в iOS, в вашем приложении расширения WatchKit вы предоставляете свой собственный объект делегата, тот, который вы пытаетесь использовать. Это автоматически присваивается делегату свойства объекта WKExtension, и могут быть доступны с помощью аналогичного метода, который используется для доступа к UIApplication делегата в прошивкой:
Swift:
let delegate = WKExtension.sharedExtension().delegate as! ExtensionDelegate
объективно- C:
WKExtensionDelegate *delegate = [[WKExtension sharedExtension] delegate];
Apple documentation of the WKExtension Class предоставляет дополнительную информацию о возможностях.
Углубляясь:
WatchKit App Расширения не при всех обстоятельствах должны обеспечить WKExtensionDelegate. Как отмечает WKExtensionDelegate documentation from Apple, «вы предоставляете объект-делегат и используете его для управления событиями жизненного цикла в своем расширении. Предоставление объекта-делегата требуется, если ваше расширение поддерживает действительные уведомления или поведение Handoff».
Вы узнаете, имеет ли расширение приложения WatchKit объект-делегат, и если это произойдет, не будет никакого смысла в жизненном цикле расширения приложения, когда вы пытаетесь получить доступ к этому делегату приложения, где он не будет существовать. Поэтому, хотя WKExtension.sharedExtension().delegate
является опциональным (расширения приложения WatchKit могут существовать там, где делегат не установлен), можно безопасно использовать as!
, чтобы принудительное принудительное возвращение не было необязательным в приведенном выше примере, поскольку разработчик знает, что они установили WKExtensionDelegate в своем приложении.