Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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
Can';不能在Swift中填充空字典_Swift_Dictionary_Nsdictionary_Sendbird - Fatal编程技术网

Can';不能在Swift中填充空字典

Can';不能在Swift中填充空字典,swift,dictionary,nsdictionary,sendbird,Swift,Dictionary,Nsdictionary,Sendbird,我正在尝试为Sendbird iOS SDK构建一个颤振插件。出于某种原因,每当我试图获取数据时,当我知道事实并非如此(我分别创建了键和值)时,我就会从NSDictionary中获取null 最有可能的事实是,作为一个Swift的初学者,我做错了什么。这是我的代码: let channelMetadata = NSMutableDictionary() // metadata is the NSDictionary<NSString *,NSObject *>

我正在尝试为Sendbird iOS SDK构建一个颤振插件。出于某种原因,每当我试图获取数据时,当我知道事实并非如此(我分别创建了键和值)时,我就会从NSDictionary中获取null

最有可能的事实是,作为一个Swift的初学者,我做错了什么。这是我的代码:

 let channelMetadata = NSMutableDictionary()
  
// metadata is the NSDictionary<NSString *,NSObject *>

        channel.getAllMetaData{ (metaData, error) in
             guard let metadata = metaData, error == nil else { 
  // Error.
                        return
                     } 

            channelMetadata["status"] = metadata["status"]
            channelMetadata["type"] = metadata["type"]                  
         }
        
          js["status"] = channelMetadata["status"]

返回null。我想这是因为我填充空字典的方式有问题,但我不知道是什么,即使搜索了几个小时。非常感谢您的帮助。

getAllMetaData
是异步的,闭包在最后一行之后执行。不要在Swift中使用
NSMutable…
集合类型。@vadian感谢您的回复。您是否建议我使用
[String:String]()
而不是
NSMutableDictionary
。我的代码应该是这样的:
channel.getAllMetaData(completionHandler:{(元数据,错误)在guard中…channelMetadata[“status”]=metaData[“status”]]channelMetadata[“type”]=metaData[“type”]]js[“status”]=channelMetadata[“status”]}
。抱歉,正如我所说,我是@vadian的完全新手。你的意思是我应该使用
DispatchGroup()enter,leave
等吗?不,在
getAllMetaData
之后的
{}
范围内做你必须做的事情,谢谢@vadian。我想我应该重新措辞我的问题。我本质上想做的是等待
元数据
有一个值,然后在闭包外使用该值,有点像
异步等待
,因为代码段是更大函数的一部分
getAllMetaData
是异步的,闭包在最后一行之后执行。不要在Swift中使用
NSMutable…
集合类型。@vadian感谢您的回复。您是否建议我使用
[String:String]()
而不是
NSMutableDictionary
。我的代码应该是这样的:
channel.getAllMetaData(completionHandler:{(元数据,错误)在guard中…channelMetadata[“status”]=metaData[“status”]]channelMetadata[“type”]=metaData[“type”]]js[“status”]=channelMetadata[“status”]}
。抱歉,正如我所说,我是@vadian的完全新手。你的意思是我应该使用
DispatchGroup()enter,leave
等吗?不,在
getAllMetaData
之后的
{}
范围内做你必须做的事情,谢谢@vadian。我想我应该重新措辞我的问题。我真正想做的是等待
元数据
有一个值,然后在闭包之外使用该值,有点像
异步等待
,因为代码段是更大函数的一部分
js["status"]