Swift 使用数组修改 Tableviews
Posted
技术标签:
【中文标题】Swift 使用数组修改 Tableviews【英文标题】:Swift Modifying Tableviews with arrays 【发布时间】:2018-08-19 14:30:49 【问题描述】:您好,我的个人项目快完成了,但是当我尝试使用数组修改表格视图时遇到了问题。 这是我正在使用的功能;它获取我拥有的数据并将其分别放入注释名称、注释坐标中,然后进入表格视图,所有这些都包含在自定义地图标注中。
我设置它的方式是使用 i 值,它会计数并完美匹配名称和坐标,如果我将 i 放入项目列表的“索引”中,它会通过计数它们来完全做到这一点。
我的问题是我希望能够在 tableview 中显示多行信息,这是使用“for _ in 0...1”。但是,当我结合 index=i 执行此操作时,我会得到 screenshot。
有人知道我将如何将 2 行信息放入每个池的 tableview 中吗?最终结果将具有正确的游泳池名称和位置(已经完成),然后是正确的相应地址和室内/室外描述。
我的代码如下,任何帮助将不胜感激我到处搜索但找不到任何有用的东西,不需要我重做所有事情。
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 Meadow*** 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 Meadow*** 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)
【问题讨论】:
在表格视图中,您是否尝试在第一行显示地址,在第二行显示位置类型? @Jackson.R 是的,这就是我想要的,但老实说,只要它们在正确的池注释中,我会在 tableview 中以任意顺序获取这两个信息,哈哈 【参考方案1】:您的代码令人困惑,因为您有一个常量 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 Meadow*** Rd")
Pool(name: "Weston Golf Club", avatar: UIImage(named: "outdoorpool 3")!, coordinate: CLLocationCoordinate2D(latitude: 42.361025, longitude: -71.287842), wishlist : "275 Meadow*** Rd", "Outdoor Pool",
... ]
或将数据保存在磁盘上的 JSON 文件中,并将 JSON 解码为 Pool
实例。
【讨论】:
您提出的功能适用于第一个注释(BSC Waltham),但我的主要问题是让后续注释(例如 BSC Wellesley)填充正确的信息。一般来说,我对编码和循环/索引很陌生,这就是为什么我的循环很混乱;最初我以为我必须使用“i”作为数组中每两个字符串的计数器,但现在我不确定这是否可能 非常感谢!我最终接受了您提出的第一个建议,因为在我看来,我个人更喜欢使用整数进行操作,而这更像是我正在寻找的快速解决方案【参考方案2】:您的愿望清单值的分组不一致。尝试将愿望清单更改为:
let wishlist = ["444 Winter St, Indoor Pool",
"275 Meadow*** Rd, Outdoor Pool",
"Someplace in Wellesley, Both Infoor and Outdoor Pools",
"a place in Natick, Either pools"]
【讨论】:
这是我尝试的第一件事,但它只是将地址和描述都放在同一行,并将下一个池信息放在第二行。以上是关于Swift 使用数组修改 Tableviews的主要内容,如果未能解决你的问题,请参考以下文章