使用数组快速修改Tableviews

时间:2018-08-19 14:30:49

标签: ios arrays swift uitableview

嗨,我的个人项目几乎完成了,但是当我尝试用数组修改表视图时出现了问题。 这是我正在使用的功能;它使用我拥有的数据并将其分别放入注释名称,注释的坐标,然后进入表格视图,这些都包含在自定义地图标注中。

我设置它的方式是使用i值进行计数,并且与名称和坐标完全匹配,如果我将i放入项目列表的“索引”中,则可以通过将它们计数而完全做到这一点。

我的问题是我希望能够在表视图中显示多行信息,这是使用“ for _ in 0 ... 1”。但是,当我结合index = i进行此操作时,我得到了screenshot

有人知道我将如何在每个池的表视图中获取两行信息吗?最终结果将具有正确的池名称和位置(已经完成),然后具有正确的对应地址和室内/室外描述。

我的代码在下面,我在各处搜索过的任何帮助将不胜感激,但是找不到任何不需要我重做所有事情的有用信息。

func populatePoolsList() {
    let names = ["BSC Waltham", "Weston Golf Club", "BSC Wellesley", "Life Time Natick"]

    let coordinates = [
        CLLocationCoordinate2D(latitude: 42.400366, longitude: -71.279059),
        CLLocationCoordinate2D(latitude: 42.361025, longitude: -71.287842),
        CLLocationCoordinate2D(latitude: 42.348945, longitude: -71.228759),
        CLLocationCoordinate2D(latitude: 42.312967, longitude: -71.394940),
        ]
    let wishlist = ["444 Winter St, Indoor Pool", "275 Meadowbrook Rd", "Outdoor Pool", "Someplace in Wellesley", "Both Infoor and Outdoor Pools", "a place in Natick", "Either pools"]
     let items = ["444 Winter St, Indoor Pool", "275 Meadowbrook Rd", "Outdoor Pool", "Someplace in Wellesley", "Both Infoor and Outdoor Pools", "a place in Natick", "Either pools"]

    pools = []
    for i in 0..<kPoolsWishListManagerNumberOfPools {
        let name = names[i]
        let avatar = UIImage(named: "outdoorpool 2")!
        var wishlist = [String]()
        for _ in 0...1 {
            let index = i
            wishlist.append(items[index])
        }

        let pool = Pool(name: name, avatar: avatar)
        pool.wishList = wishlist
        pool.location = coordinates[i]
        pools.append(pool)
    }
} 

2 个答案:

答案 0 :(得分:0)

您的代码令人困惑,因为您有一个常量wishlist和一个后来的局部变量wishlist,它们是不同的对象。

由于没有使用当前循环索引,而是使用了最外层的索引i

,因此您两次附加同一项目

也许您是说在第一次迭代中使用了0和1,在第二个迭代中使用了2和3,依此类推。

let index = i * 2
wishlist = [items[index], items[index+1]]

这要求常量wishlist至少包含kPoolsWishListManagerNumberOfPools * 2个项目,否则将导致崩溃超出范围。


基本上,如果数据仍然是静态的,我建议扩展池初始化程序

init(name: String, avatar: UIImage, coordinate: CLLocationCoordinate2D, wishlist : [String])

并以更有效的方式填充数组

func populatePoolsList() {
   pools = [Pool(name: "BSC Waltham", avatar: UIImage(named: "outdoorpool 2")!, coordinate: CLLocationCoordinate2D(latitude: 42.400366, longitude: -71.279059), wishlist : "444 Winter St, Indoor Pool", "275 Meadowbrook Rd")
            Pool(name: "Weston Golf Club", avatar: UIImage(named: "outdoorpool 3")!, coordinate: CLLocationCoordinate2D(latitude: 42.361025, longitude: -71.287842), wishlist : "275 Meadowbrook Rd", "Outdoor Pool",
            ... ]

或将数据保存在磁盘上的JSON文件中,然后将JSON解码为Pool实例。

答案 1 :(得分:0)

您的愿望清单值未统一分组。尝试将愿望清单更改为此:

<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="map_canvas"></div>