2017-03-23 15 views
-1

SDKからアプリケーションデリゲートのクラス名を知らないアプリケーションデリゲートにアクセスしようとしています。私のSDKは、どのクラスが基本的なプロジェクトのアプリケーションデリゲートになるのかわからないということです。そこで、私はプロトコルUIApplicationDelegateに準拠したクラスを見つけました。Swift:AnyClassは型ではありません

let numberOfClasses: UnsafeMutablePointer<UInt32> = UnsafeMutablePointer<UInt32>.alloc(0) 
    let classes = objc_copyClassList(numberOfClasses) 
    var appDelegateClass: AnyClass? = nil 

    for i in 0...Int(numberOfClasses.memory) { 
     if class_conformsToProtocol(classes[i], UIApplicationDelegate.self) { 
      appDelegateClass = classes[i] 
     } 
    } 

しかし、結果は、 "タイプ" "AnyClassを?" があります。次のコードの結果がエラーを取得「『applicationDelegateClassは』タイプではありません」:

if let applicationDelegateClass = appDelegateClass { 
     if let delegate = UIApplication.sharedApplication().delegate as? applicationDelegateClass.self { } 
    } 

私はそれを解決できる方法は?

+1

なぜあなたは次のようなメソッドを呼び出さないのですか?let appDelegate = UIApplication.shared.delegateを! AppDelegate –

+0

あなたは何を達成しようとしていますか? 'UIApplication.shared.delegate' *はそのクラス名に関係なく、アプリケーションデリゲートです。 - 条件付きで*変数*クラス型にキャストすることはできません。 –

+0

私のSDKは、どのクラスが基本プロジェクトのアプリケーションデリゲートになるかわからないためです。 –

答えて

0

実際には、特定のアプリケーションデリゲートクラスを使用しないでください。正しいコード:

if let delegate = UIApplication.sharedApplication().delegate! as? UIApplicationDelegate {} 
関連する問題