如何将swiftyJSON dictionaryValue用作UILabel的可用字符串?
我有一个UITableViewController内makeRequest()
方法用下面的代码:如何将swiftyJSON dictionaryValue用作UILabel的可用字符串?
func makeRequest() { Alamofire.request(.GET, self.foursquareEndpointURL, parameters: [
//"VENUE_ID" : self.foursquareVenueID,
"client_id" : self.foursquareClientID,
"client_secret" : self.foursquareClientSecret,
"v" : "20140806"
])
.responseJSON(options: nil) { (_, _, data, error) -> Void in
if error != nil {
println(error?.localizedDescription)
} else if let data: AnyObject = data {
let jObj = JSON(data)
if let venue = jObj["response"]["venue"].dictionaryValue as [String: JSON]? {
self.responseitems = jObj
println("venue is: \(venue)")
}
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData() // Update UI
}
}
}
}
也请记住,我有一个属性var responseitems:JSON = []
println("venue is: \(venue)")
打印一个好看的响应安慰,所以我知道这是正常工作......
我也有一个bindData()
方法用下面的代码自定义的UITableViewCell类:
func bindData() { println("VenueDetailHeaderCell data did set")
self.venueDetailTitleLabel.text = self.headerInfo?["name"].stringValue
let labelData = self.headerInfo?["name"].stringValue
println("labelData is: \(labelData)")
}
正如你所看到的,我试图在JSON响应中将UILabel的文本设置为[“name”]。stringValue。然而,当我我得到的标签数据的控制台输出是:可选(“”)这显然是空的。
这里是我想要抓住
我在做什么错在这里的截图,我怎么能抢场地的名字和我的UILabel分配给它?
UPDATE:
我尝试以下代码
let labelData = self.headerInfo?["name"].error println("labelData is: \(labelData)")
而得到的控制台输出:“错误域= SwiftyJSONErrorDomain代码= 901 “数组[0]的故障,这是不是数组” UserInfo = 0x7fd6d9f7dc10 {NSLocalizedDescription = Array [0]失败,它不是数组}}“如果这对任何人都有用。我真的很困惑......任何想法?
回答:
的问题是,headerInfo
值是错误JSON
对象,因为你试图访问一个字典与一个整数值。请注意0不会创建数组对象。 SwiftyJSON了自动分配,构造函数(我是新来的迅速,所以不知道正确的迅速术语是什么)......看到这个初始化器在SwiftyJSON.swift源代码:
extension JSON: ArrayLiteralConvertible { public init(arrayLiteral elements: AnyObject...) {
self.init(elements)
}
}
这意味着当你做var responseitems:JSON = []
你没有创建一个数组时,你正在创建一个JSON
对象,它使用上面的init
方法用一个空的数组构建。然后,当您执行self.responseitems = jObj
时,您将重新将该变量变量分配给JSON
对象,并在其中包含字典。因此self.responseitems[0]
无效。
另请注意,使用SwiftyJSON时,没有可选的JSON
对象。我注意到,在你的评论中你说你是var headerInfo:JSON? ...
- 不可能有一个可选的JSON
。
var headerInfo: JSON = nil
以上是可能的 - 这使用另一种自动初始化剂的是初始化一个有效JSON
对象,表示JSON空值。
那么,如何解决它?
当分配headerInfo
做这样的:
let headerInfo = self.responseitems["response"]["venue"]
现在在bindData
你可以这样做:
self.venueDetailTitleLabel.text = self.headerInfo["name"].stringValue
注意,上述所有假设雨燕1.2和SwiftyJSON> = 2.2 - 在理解了上述内容并纠正了问题之后,您也许会想重构一下代码以反映对数据模型的正确理解。
回答:
解析的方法是下一个
element: JSONValue //Something with JSONValue if let title = element["name"]?.string {
cell.title.text = title
}
以上是 如何将swiftyJSON dictionaryValue用作UILabel的可用字符串? 的全部内容, 来源链接: utcz.com/qa/257237.html