2016-05-16 160 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 ?? ""