書き方 - Swiftのアプリケーションデリゲートへの参照を取得するにはどうすればよいですか?




swift デリゲート メリット (11)

Swiftのアプリケーションデリゲートへの参照を取得するにはどうすればよいですか?

最終的には、参照を使用して管理オブジェクトコンテキストにアクセスする必要があります。


SWIFT <3

AppDelegateクラスでexを作成する

func sharedInstance() -> AppDelegate{
        return UIApplication.sharedApplication().delegate as! AppDelegate
    }

それをex

let appDelegate : AppDelegate = AppDelegate().sharedInstance()

SWIFT> = 3.0

func sharedInstance() -> AppDelegate{
    return UIApplication.shared.delegate as! AppDelegate
}

便利なコンストラクタ

AppDelegateクラスをコードの最後に追加する

スウィフト3&4

func appDelegate () -> AppDelegate
{
    return UIApplication.shared.delegate as! AppDelegate
}

あなたのクラスでAppDelegateリファレンスを使用するには?

AppDelegateメソッドを呼び出す

appDelegate()。setRoot()


Objective-Cとほぼ同じです

let del = UIApplication.sharedApplication().delegate

Swift 3.0では、あなたはappdelegate referenceを得ることができます。

let appDelegate = UIApplication.shared.delegate as! AppDelegate

AppDelegateクラス名をハードコーディングしないようにするUIApplicationDelegate拡張機能を次に示しAppDelegate

extension UIApplicationDelegate {

    static var shared: Self {    
        return UIApplication.shared.delegate! as! Self
    }
}

// use like this:
let appDelegate = MyAppDelegate.shared // will be of type MyAppDelegate

ここにはSwift 2.0のバージョンがあります:

let delegate = UIApplication.sharedApplication().delegate as? AppDelegate

また、管理対象オブジェクトのコンテキストにアクセスするには:

    if let delegate = UIApplication.sharedApplication().delegate as? AppDelegate {

        let moc = delegate.managedObjectContext

        // your code here

    }

またはガードを使用して:

    guard let delegate = UIApplication.sharedApplication().delegate as? AppDelegate  else {
        return
    }

    let moc = delegate.managedObjectContext

    // your code here

それは非常に簡単です

Appデリゲートインスタンス

let app = UIApplication.shared.delegate as! AppDelegate

1行の構文でメソッドを呼び出すことができます

app.callingMethod()

このコードで変数にアクセスできます

app.yourVariable = "Assigning a value"

もう1つの解決策は、アプリケーションのデリゲートへの参照を取得するという点では正しいですが、管理オブジェクトコンテキストのように、UIApplicationのサブクラスによって追加されたメソッドや変数にはアクセスできません。 これを解決するには、単純に "AppDelegate"にダウンキャストするか、あなたのUIApplicationサブクラスを呼び出すことがあります。 そのようです:

Swift 3.x(Xcode 8で導入されました)

let appDelegate = UIApplication.shared.delegate as! AppDelegate
let aVariable = appDelegate.someVariable

Swift 1.2 - 2.x(Xcode 6.3で導入されました)

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let aVariable = appDelegate.someVariable

スイフト<1.2

let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let aVariable = appDelegate.someVariable

私の場合、 NSManagedObjectサブクラスの上にimport UIKitがありませんでした。 インポート後、 UIApplicationUIKitの一部であるため、そのエラーを取り除くことができUIKit

他人を助けることを願っています!


私の場合、私がインポートを逃したUIKit:

import UIKit

簡単にこれを試してください:

スウィフト4

// Call the method
(UIApplication.shared.delegate as? AppDelegate)?.whateverWillOccur()

AppDelegateのどこで:

// MARK: - Whatever
func whateverWillOccur() {

    // Your code here.

}




swift