如何将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

回到顶部