[英]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'
由於userInfo
在UIApplicationShortcutItem.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.