我有一个像这样的数组:-
var priceArray = [0, 200, 400, 600, 800, 1000]
我从应用程序中的Api获得了这些数据。而且我正在使用tableView
显示数据,因此我可以提供以下价格选择:-
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return priceArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "stickCell", for: indexPath) as! StcikCell
cell.priceLabel.text = "\(priceArray[0]) - \(priceArray[1])"
return cell
}
但是问题是我是否会使用此
cell.priceLabel.text = "\(priceArray[0]) - \(priceArray[1])"
我只会在tableView
中获得第一个和第二个值,但是我真正想要的是在第一行中我想要获得0 - 200
,然后在第二行200 - 400
中获得第三{{1 }},直到得到400 - 600
的组合。我怎样才能做到这一点。请帮忙吗?
答案 0 :(得分:2)
您需要使用indexPath.row
为priceArray
中的cellForRowAt
编制索引,并且还需要修改numberOfRowsInSection
,因为价格范围比{{1 }}。
priceArray
答案 1 :(得分:1)
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return (priceArray.count - 1)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "stickCell", for: indexPath) as! StcikCell
let index = indexPath.row
cell.priceLabel.text = "\(priceArray[index]) - \(priceArray[index + 1])"
return cell
}
这应该可以完成工作。
答案 2 :(得分:1)
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return priceArray.count - 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "stickCell", for: indexPath) as! StcikCell
cell.priceLabel.text = "\(priceArray[indexPath.row]) - \(priceArray[indexPath.row + 1])"
return cell
}
答案 3 :(得分:1)
您的价格数组包含6个元素。但您需要5个价格范围。 因此,您需要从numberOfRowsInSection减去1,这将给您5个元素。
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
audioAttributes = new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_GAME)
.build();
soundPool = new SoundPool.Builder()
.setAudioAttributes(audioAttributes)
.setMaxStreams(2)
.build();
}else{
soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC,0);
}
答案 4 :(得分:1)
您可以简单地创建用于为tableView创建dataSource数组的函数:
func makeTableDataSource(from priceArray: [Int]) -> [String] {
var resultArray = [String]()
for (index, price) in priceArray.enumerated() where index < priceArray.count - 1 {
resultArray.append("\(price) - \(priceArray [index + 1])")
}
return resultArray
}
结果:
var priceArray = [0, 200, 400, 600, 800, 1000]
Result:
- 0 : "0 - 200"
- 1 : "200 - 400"
- 2 : "400 - 600"
- 3 : "600 - 800"
- 4 : "800 - 1000"
var priceArray = [0, 200, 400]
Result:
- 0 : "0 - 200"
- 1 : "200 - 400"
var priceArray = [0]
Result:
[]
之后,只需创建private var tableViewDataSource = [String]()
之类的属性
然后在您的viewDidLoad()
中添加:
override func viewDidLoad() {
super.viewDidLoad()
var priceArray = [0, 200, 400, 600, 800, 1000]
tableViewDataSource = makeTableDataSource(from: priceArray)
}
在您的情况下很容易使用:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tableViewDataSource.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "stickCell", for: indexPath) as! StcikCell
cell.priceLabel.text = tableViewDataSource[indexPath.row]
return cell
}
这种方法的优点:
makeTableDataSource
中进行操作,其他一切都可以正常工作)array.count - 1
或array.count + 1
,因此可能发生崩溃的位置更少)祝您编程愉快!
答案 5 :(得分:1)
您所需要做的就是正确准备数据源。
为此,我建议将现有价格数组拆分为多个块并将其映射到您要表示的对象。您的情况是字符串类型。
您可以使用以下扩展名:
extension Sequence {
func split(by chunkSize: Int) -> [[Self.Element]] {
return self.reduce(into:[]) { memo, cur in
if memo.count == 0 {
return memo.append([cur])
}
if memo.last!.count < clump {
memo.append(memo.removeLast() + [cur])
} else {
memo.append([cur])
}
}
}
}
用法:
var priceArray = [0, 200, 400, 600, 800, 1000]
let dataSource = priceArray.split(by: 2).map { "\($0[0]) - \($0[1])" }
// result: ["0 - 200", "400 - 600", "800 - 1000"]