簡體   English   中英

在Swift中讀取NSNotification userInfo

[英]Reading NSNotification userInfo in Swift

(一般來說,我是Swift和iOS開發的新手)。

我正在將一些Objective-C代碼移植到Swift,但我不知道該如何翻譯:

-(void) fooDidBar:(NSNotification *)notification
{
    Foo* foo = [[notification userInfo] objectForKey:BarKey];
    // do stuff with foo
}

到目前為止,我有這個:

private func fooDidBar(notification: NSNotification) {
    var foo: Foo = notification.userInfo.objectForKey(BarKey)
}

但是我得到一個編譯器錯誤:

/Users/me/src-me/project/FooBarViewController.swift:53:57:類型'[NSObject:AnyObject]的值?' 沒有成員'objectForKey'

由於userInfoUIApplicationShortcutItem.h被聲明為NSDictionary

@property (nullable, nonatomic, copy) NSDictionary<NSString *, id <NSSecureCoding>> *userInfo;

...我想嘗試一下:

= notification.userInfo[BarKey]

但是然后我得到這個錯誤:

/Users/me/src-me/project/FooBarViewController.swift:53:65:輸入'[NSObject:AnyObject]?' 沒有下標成員

您使用下標的想法是正確的,但是,通過出現?可以看到? userInfo字典是Optional ,意味着它可以為nil(在Objective-C中,沒有區別)。 此外,Swift的Dictionary在類型上不如NSDictionary寬大,因此您需要使用as? 確保該值是您期望的Foo實例。

您不能直接下標可選詞典,但是如果使用? 對於可選鏈接 ,如果字典為非nil,則可以訪問該值。 我還建議if let訪問非零的最終值。 (或者您可以選擇使用帶有fatalError guard let fatalError或者在不存在Foo的情況下return 。)

if let foo = notification.userInfo?[BarKey] as? Foo {
    // foo is non-nil (type `Foo`) in here
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM