2016-03-29 3 views
1

Я хотел бы расширить протокол UIApplicationDelegate и обеспечить реализацию по умолчанию для метода application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool. Однако реализация по умолчанию, которую я предоставил, не вызвана.Расширение протокола UIApplicationDelegate

Возможно ли вообще продлить протокол UIApplicationDelegate (относительно UIApplication, являющегося одноэлементным, или метод протокола является необязательным), или я делаю что-то неправильно?

благодаря

AppDelegate.swift:

import UIKit 
extension UIApplicationDelegate{ 
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
     print("does not print anything on launch.") 
     return true 
    } 
} 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 
} 
+0

- приложение быстро или obj-c при его создании? что весь код в вашем расширении? у вас есть набор экземпляров делегата и какие функции он реализует? – Wain

+1

Что я пытаюсь сделать с этим, мне любопытно? Я не вижу смысла давать appDelegate реализацию по умолчанию, так как есть только 1 appDelegate. – crashoverride777

+1

@ crashoverride777 Я хотел бы разработать протокол, который можно использовать в нескольких проектах с контейнерами, что обеспечивает функциональность push-уведомления (например, UIPushNotificationDelegate). Я также хотел бы расширить протокол UIApplicationDelegate, предоставить реализацию по умолчанию для didRegisterForRemoteNotificationsWithDeviceToken, когда реализатором является UIPushNotificationDelegate, и отправить токен устройства на сервер с использованием методов UIPushNotificationDelegate в качестве реализации по умолчанию. – user1994321

ответ

1

Оказывается, вы не можете предоставить стандартные реализации для протоколов Objective-C через расширения. См. Ниже ссылку для получения подробного списка ограничений для расширений протокола.

https://www.captechconsulting.com/blogs/ios-9-tutorial-series-protocol-oriented-programming-with-uikit

Что мы не можем сделать: обеспечить реализацию по умолчанию для протоколов Objective-C.

-2

Там нет смысла делать расширения для протоколов.
Причины:

  1. Протокол содержит только объявление функции, но расширение необходимо определение функции.
  2. Протокол - это всего лишь набор правил (методов). Он не выделяет никакой памяти.
  3. Определения функций протокола будут представлены в классе делегатов. Таким образом, вызов функции никогда не придет к определению функции, которое вы используете .
+0

Итак, почему эта функциональность существует даже на языке? Особенно, когда мы считаем, что этого не было от новичка. – nhgrif

+0

Расширения протокола являются частью языка программирования Swift ... – user1994321

0

Я столкнулся с той же проблемой, и для этого конкретного файла я вернулся к Objective-C для достижения этой функциональности.

#import <UIKit/UIKit.h> 

@interface NSObject (BasicMethods) <UIApplicationDelegate> 

@end 

с

#import "UIApplicationDelegate+BasicMethods.h" 

@implementation NSObject (BasicMethods) 

- (void)applicationDidFinishLaunching:(UIApplication *)application { 
    NSLog(@"I'm getting called"); 
} 

@end 

работ.

Смежные вопросы