[英]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.