在 Swift 中删除 Unwrapped 并使其成为可选? [复制]

Posted

技术标签:

【中文标题】在 Swift 中删除 Unwrapped 并使其成为可选? [复制]【英文标题】:Remove Unwrapped and make Optional in Swift? [duplicate] 【发布时间】:2020-01-31 05:44:00 【问题描述】:

可选类型“[AnyObject]?”的值必须解包为 输入“[AnyObject]”

我将一个数组的值传递给另一个数组

第一个数组声明

var arrayShow = [AnyObject]()

第二个数组声明

var arrayData = [AnyObject]()

我在这里崩溃了: 我必须将下面的行作为选项并删除! @vadian vc.arrayData = (self.arrayShow[tag] as?[AnyObject])!

我的代码:

let status = self.nullToNil(value: result["status"]) as? String ?? ""
                let doc_url = self.nullToNil(value: result["doc_url"]) as? String ?? ""
                self.arrayShow.removeAll()

                if(status == "200")
                    let data = self.nullToNil(value: result["data"]) as? [[String:AnyObject]]
                    self.arrayShow.append(data as AnyObject)
                    print("Array : \(self.arrayShow)")

                    DispatchQueue.main.async 
                        if(data?.count == 0)
                            self.alert(message: "No Data Found.")
                        else
                            if let vc = self.storyboard?.instantiateViewController(withIdentifier: "ViewPrescriptionReport") as? ViewPrescriptionReport 
                                vc.modalPresentationStyle = .overCurrentContext
                                vc.strTitle = "View Prescription"
                                vc.strURL = doc_url
                                vc.arrayData = (self.arrayShow[tag] as? [AnyObject])!
                                self.present(vc, animated:true, completion: nil)
                            
                        
                    
                
                else
                    print("no data found")
                

【问题讨论】:

其实这个错误的意思是Make Unwrapped and Remove Optional in Swift ???? 你能显示实际产生错误的代码吗?这些数组都不是可选的。为什么要使用AnyObject 的数组?你不知道元素的实际类型吗? 消除 !是使用条件if let element = arrayShow[tag] as? [AnyObject] arrayData = element ,但我怀疑这不会进入块,因为似乎arrayShow[tag] 中的元素不是AnyObject 的数组,即你是说 arrayShow 是一个数组数组 您在检索 JSON 吗?有更好的处理方法 你能出示你的JSON吗? 【参考方案1】:

因为arrayShow 不是 [[]] 即数组数组,所以唯一的删除方法!是从 arrayShow 中获取 [tag] 处的元素并附加到新创建的数组中。像这样。

...
 let element = self.arrayShow[tag]
  vc.arrayData = [AnyObject]()
  vc.arrayData.append(element)
...

【讨论】:

以上是关于在 Swift 中删除 Unwrapped 并使其成为可选? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

从图像中删除白色背景并使其透明

如何将 AppDelegate Swift 代码放入 Objective-C AppDelegate 文件并使其工作?

如何创建 ElasticSearch 类型并使其在索引中可搜索

如何使 UIImageView 可点击并使其执行某些操作? (迅速)

如何删除 UIImage 背景颜色并使其透明?

如何删除粘性标题并使其保持静态