Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Swift中将对象添加到NSDictionary_Ios_Objective C_Swift - Fatal编程技术网

Ios 在Swift中将对象添加到NSDictionary

Ios 在Swift中将对象添加到NSDictionary,ios,objective-c,swift,Ios,Objective C,Swift,我有以下目标C代码: NSMutableDictionary *options = // some values options[kCRToastInteractionRespondersKey] = @[[CRToastInteractionResponder interactionResponderWithInteractionType:CRToastInteractionTypeTap

我有以下目标C代码:

NSMutableDictionary *options = // some values

options[kCRToastInteractionRespondersKey] = 
   @[[CRToastInteractionResponder interactionResponderWithInteractionType:CRToastInteractionTypeTap                                                                                                          
              automaticallyDismiss:YES                                                                                                                              
              block:^(CRToastInteractionType interactionType){                                                                                                                              
                  NSLog(@"Dismissed with %@ interaction", 
                  NSStringFromCRToastInteractionType(interactionType));                                                                                                                          
              }]];
我想在Swift中创建等效项:

var options:[NSObject:AnyObject] = [:]
options[kCRToastInteractionRespondersKey] = CRToastInteractionResponder(interactionType: CRToastInteractionType.Tap, automaticallyDismiss: true) { (r:CRToastInteractionType) -> Void in }
当我运行代码时,我得到一个错误:

ERROR given <CRToastInteractionResponder: 0x7b9e2cd0> for key kCRToastInteractionRespondersKey was expecting Class NSArray but got Class CRToastInteractionResponder, passing default on instead
但是,当使用以下命令调用它时,我必须将选项转换为
[NSObject:AnyObject]

CRToastManager.showNotificationWithOptions(options as [NSObject : AnyObject], completionBlock: { () -> Void in
  println("done!")
})

错误仍然是一样的。

我认为这就是解决方案:

var options:[NSObject:AnyObject] = [:]
options[kCRToastInteractionRespondersKey] = [CRToastInteractionResponder(interactionType: CRToastInteractionType.Tap, automaticallyDismiss: true) { (r:CRToastInteractionType) -> Void in }]

NSDictionary在初始化时可以有对象,因此不能在初始化后添加对象

所以你需要一本易变字典

你可以写

var options:NSMutableDictionary = NSMutableDictionary()
options .setObject("your object to store", forKey: kCRToastInteractionRespondersKey)
或者,您可以将块的结果存储在var中,然后再将其添加到字典中


希望这将对您有所帮助。

尝试改为使用var选项:NSDictionary。@iosDev82仍然不工作。遇到同样的错误,请参阅我的帖子。请注意,您试图在Objective-C和Swift代码中执行完全不同的操作。Objective-C代码将值设置为包含一个元素的数组,该元素是交互响应器。Swift代码尝试将该值设置为交互响应程序本身。所以第一件事是决定你想做什么。@matt我想把第一行中的Objective-C语句翻译成Swift的等价物?我要指出的是你没有这样做。
var options:NSMutableDictionary = NSMutableDictionary()
options .setObject("your object to store", forKey: kCRToastInteractionRespondersKey)