2016-05-16 122 views
-4
可选

我试图将一个字符串分配给一个标签,像这样:字符串还在斯威夫特

self.MsgBlock4.text = "\(wsQAshowTagArray![0]["MsgBlock4"]!)" 

但它显示像这样Optional(James)标签如何删除可选的()?

阵列内的字典来自这里:

self.wsQAshowTag(Int(barcode)!, completion: { wsQAshowTagArray in 

}) 

这里是方法:

func wsQAshowTag(tag: Int, completion: ([AnyObject]? -> Void)) { 
     let requestString = NSString(format: "URL?wsQATag=%d", tag) as String 
     let url: NSURL! = NSURL(string: requestString) 
     let task = NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: { 
      data, response, error in 
      do { 
       let result = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as? [AnyObject] 
       completion(result) 
      } 
      catch { 
       completion(nil) 
      } 
     }) 
     task.resume() 
    } 
+0

'wsQAshowTagArray'的是什么类型的任何类型?你应该再次打开结果。 –

+0

尝试将此'完成(结果)'更改为'完成(结果!)'。或者更改完成:([AnyObject]? - > Void))'完成:([AnyObject]! - > Void))' – ntoonio

+0

不要让你的数组成为可选的。 – Moritz

回答

2

由于这些是自选和类型可以是AnyObject,可选链接/向下转换,并提供一个使用零合并运算符的默认值似乎是最安全的方法。如果你期待的项目是一个String

self.MsgBlock4.text = (wsQAshowTagArray?[0]["MsgBlock4"] as? String) ?? "" 

或者我猜符合CustomStringConvertible您可以使用它description

self.MsgBlock4.text = (wsQAshowTagArray?[0]["MsgBlock4"] as? CustomStringConvertible)?.description ?? ""