Класс WKExtension
в WatchOS 2 автоматически предоставляет один объект расширения для каждого расширения, чтобы управлять поведением, которое является общим для всех контроллеров интерфейса вашего приложения. В документации Apple указано, что вы "используете объект extension для выполнения задач уровня приложения, таких как открытие URL-адресов и получение контроллера корневого интерфейса вашего приложения ".
Как и в iOS, в вашем расширении приложения WatchKit вы предоставляете собственный объект делегата, на который вы пытаетесь сослаться. Это автоматически назначается свойству делегата объекта WKExtension, и к нему можно получить доступ, используя метод, аналогичный методу, который используется для доступа к делегату UIApplication в iOS:
Swift:
let delegate = WKExtension.sharedExtension().delegate as! ExtensionDelegate
Цель-C:
WKExtensionDelegate *delegate = [[WKExtension sharedExtension] delegate];
Дополнительная информация содержится в документации Apple по классу WKExtension, информация о возможностях.
Углубляясь в подробности:
Расширения приложений WatchKit не при всех обстоятельствах должны предоставлять WKExtensionDelegate. Как В документации WKExtensionDelegate от Apple отмечается: «Вы предоставляете объект делегата и используете его для управления событиями жизненного цикла в вашем расширении. Предоставление объекта делегата требуется, если ваше расширение поддерживает активные уведомления или режимы передачи обслуживания».
Вы будете знать, есть ли у вашего расширения приложения WatchKit объект делегата, и если он есть, в жизненном цикле расширения приложения не будет точки, в которой вы пытаетесь получить доступ к этому делегату приложения, где он не будет существовать. Следовательно, хотя WKExtension.sharedExtension().delegate
является необязательным (расширения приложения WatchKit могут существовать, если не установлен делегат), безопасно использовать as!
для принудительного преобразования возврата в необязательный в приведенном выше примере, учитывая, что разработчик знает, что они установили WKExtensionDelegate в своем расширении приложения.
person
Duncan Babbage
schedule
28.03.2016