【发布时间】:2018-02-14 12:00:40
【问题描述】:
我正在尝试在 tableView 中添加从 google 地方 API 获取的用户评论
"reviews" : [
{
"author_name" : "Robert Ardill",
"author_url" : "https://www.google.com/maps/contrib/106422854611155436041/reviews",
"language" : "en",
"profile_photo_url" : "https://lh3.googleusercontent.com/-T47KxWuAoJU/AAAAAAAAAAI/AAAAAAAAAZo/BDmyI12BZAs/s128-c0x00000000-cc-rp-mo-ba1/photo.jpg",
"rating" : 5,
"relative_time_description" : "a month ago",
"text" : "Awesome offices. Great facilities, location and views. Staff are great hosts",
"time" : 1491144016
}
],
https://developers.google.com/places/web-service/details,现在我只尝试添加评分、作者姓名和文本,这是我的自定义 tableViewCell
import UIKit
class myReviewTableCell: UITableViewCell {
@IBOutlet weak var revText: UITextView!
@IBOutlet weak var revRating: UIImageView!
@IBOutlet weak var revAuthor: UILabel!
var place: EClass?
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
func revSelect(place:Eclass) {
NearbyPlaces.getPlaceDetails(place: place) { (place) in
DispatchQueue.main.async {
if let rev = place.details?["reviews"] as? [String:Any] {
}
}
}
}
}
我需要在哪里正确构建func revSelect(place:Eclass),然后在我的 cellForRowAt 中调用它。我已经尝试添加其他参数,例如
if (place.details?["website"] as? String) != nil {
self.webButton.isHidden = false
}
else {
self.webButton.isHidden = true
}
if let phoneNumber = place.details?["international_phone_number"] as? String {
self.myLabel4.text = "\(phoneNumber)"
}
else {
self.myLabel4.isHidden = true
}
}
}
它们工作得很好,但评论是一个数组所以不同,我也尝试遵循参数“几何”的逻辑
if let g = placeInfo["geometry"] as? [String:Any] {
if let l = g["location"] as? [String:Double] {
if let lat = l["lat"], let lng = l["lng"] {
location = CLLocationCoordinate2D.init(latitude: lat, longitude: lng)
}
}
}
我在另一个课程中添加了,但它不起作用。那么我必须在我的 func revSelect 中做些什么来制作 rev.Author.text = "author_name" , revText = "text" 等?? (我之前已经问过这个问题,但我无法解决问题)
//更新
这是我用来获取地点详细信息的函数
static func getPlaceDetails(place:EClass, completion: @escaping (EClass) -> Void) {
guard place.details == nil else {
completion(place)
return
}
var params : [String : Any]
params = [
"key" : AppDelegate.googlePlacesAPIKey,
"placeid" : place.placeId,
]
Alamofire.request(googlePlaceDetailsHost, parameters: params, encoding: URLEncoding(destination: .queryString)).responseJSON { response in
let value = response.result.value as? [String : Any]
place.details = (value)?["result"] as? [String : Any]
/* print(((value)?["result"] as? [String : Any] ?? [String : Any]()).debugDescription) */
completion(place)
}
}
【问题讨论】:
标签: ios json swift google-places-api swift4