UISearchBar和JSON数据

时间:2018-02-19 04:37:43

标签: json swift uisearchbar

这是我第一次使用UISearchBar,这让我感到困惑。

我认为我最大的问题是不了解JSON的存储和显示方式。

我将JSON数据存储为:

    [{
  "referralId" : "v-1519014616",
  "name" : "Empire State Building",
  "storeId" : "",
  "hereNow" : {
    "count" : 2,
    "summary" : "2 people are here",
    "groups" : [
      {
        "count" : 2,
        "type" : "others",
        "name" : "Other people here",
        "items" : [

        ]
      }
    ]
  },
  "stats" : {
    "tipCount" : 1105,
    "checkinsCount" : 185916,
    "usersCount" : 129661
  },
  "venueRatingBlacklisted" : true,
  "beenHere" : {
    "lastCheckinExpiredAt" : 0
  },
  "specials" : {
    "count" : 0,
    "items" : [

    ]
  },
  "venuePage" : {
    "id" : "64514349"
  },
  "verified" : true,
  "location" : {
    "state" : "NY",
    "neighborhood" : "Midtown Manhattan, New York, NY",
    "crossStreet" : "btwn 33rd & 34th St",
    "lat" : 40.748469532965927,
    "address" : "350 5th Ave",
    "cc" : "US",
    "city" : "New York",
    "postalCode" : "10118",
    "formattedAddress" : [
      "350 5th Ave (btwn 33rd & 34th St)",
      "New York, NY 10118"
    ],
    "lng" : -73.985513794430119,
    "distance" : 17,
    "country" : "United States"
  },
  "hasPerk" : false,
  "id" : "43695300f964a5208c291fe3",
  "categories" : [
    {
... etc
},

我把它存储在一个名为locations的数组中,我试图用搜索栏过滤它。

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        let name = self.locations[0]["name"].string
        filteredLocations = locations.filter { names in
            return (name!.lowercased().contains(searchText.lowercased()))
        }

        tableView.reloadData()
    }

现在,显然,name只会搜索数组中的项目。如何过滤每个位置的name键以正确过滤?

1 个答案:

答案 0 :(得分:2)

尝试这个 ...不要先从位置数组获取名称...

 let filterArr = locations.filter {
        return (($0["name"] as! String).lowercased().contains(searchText.lowercased())))
    }

使用此来获取搜索结果