我有一个代表底层数组的表视图。percentage
这些单元格有一个标签和一个滑块,应显示数组属性的值。
我想在百分比属性发生变化时使用键值观察来更新标签。(我知道 KVO 在这个例子中有点矫枉过正,但最终滑动一个滑块会影响其他单元格,包括滑块的位置,并且底层数组将从应用程序中的多个位置随时设置,因此 KVO 是可行的方法。 )
我从这个答案中得到了很多帮助,但我无法让它启动并更新标签。我在这里包含了我的所有代码。不知道我哪里错了。
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, CustomCellDelegate {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
for i in 0...4 {
items.append(Items(ID: i, percentage: 50))
}
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { …
Run Code Online (Sandbox Code Playgroud) 我可能真的错了。小白。我在这里重现了我在游乐场类型环境中所做的事情。基本上,发送者是其他滑块的 UITableView 中的滑块。myData 是基础数据。我想对基础数据的所有项目执行计算,除了与发送者项目相对应的项目之外。我不知道我的闭包语法是否正确。这是我第一次创建。
// sender comes over as a struct
struct myStruct {
var tag: Int = 0
var value: Float = 0
}
let sender = myStruct(tag: 1, value: 199)
// some vars for the calculation
let globalTotal: Float = 597
let globalAnotherTotal: Float = 0
// an array of data structs
struct myDataStruct {
var name: String = ""
var value: Float = 0
}
var myData: [myDataStruct] = []
myData.append(myDataStruct(name: "Tom", value: 45.0))
myData.append(myDataStruct(name: "Dick", value: …
Run Code Online (Sandbox Code Playgroud) 这是(应该是)一个函数,它确保多个滑块值之和总是相加globalTotal
.
用户可以手动更改滑块值changer.value
,然后将此功能应用于其他滑块的值时,可以确定它们的新值或endVal
.
它startVal
需要改变的滑块和改变的滑块的原始值,changerStartVal
并且可以通过加权确定其他的新值.
问题和我的问题是.有时remainingStartVals
可以为零(当滑块更改一直移动到最大值时)或者startVal
可以为零(当滑块更改移动到零然后移动另一个滑块时).当发生这种情况时,我分别得到除零或乘零.这两个都很糟糕,导致不正确的结果.有没有一种简单的方法来解决这个问题?
func calcNewVal(startVal: Float, changerStartVal: Float) -> Float {
let remainingStartVals = globalTotal - changerStartVal
let remainingNewVals = globalTotal - changer.value
let endVal = ((startVal * (100 / remainingStartVals)) / 100) * remainingNewVals
return endVal
}
Run Code Online (Sandbox Code Playgroud) 有什么方法可以从这个不变异的对象创建这个集合.我可以用lodash吗?
var obj = {Express: 2, Long_Haul: 1, Short_Haul: 1}
let collection = []
Object.keys(obj).forEach(key => collection.push({method: key, quantity:
obj[key]}))
// output:
// [ { method: 'Express', quantity: 2 },{ method: 'Long_Haul', quantity: 1 },{ method: 'Short_Haul', quantity: 1 } ]
Run Code Online (Sandbox Code Playgroud)