我想用更聪明的东西,使用结构或任何简单的解决方案来取代我的丑陋。
我班上有很多方法可以编写,我不喜欢它。
对于想象力,我创建了一个包含一些方法的类。
一个例子是关于成员数量,谁和分配的预算之间的关系:
class Budget {
var distribution : (Int, Double) = (0, 0.0) // (number of members, sum per member) as tuple
func getBudget(distribution: (Int, Double)) -> Double {
let members = distribution.0
let perMember = distribution.1
return Double(members) * perMember
}
func ratioBySumPerMember(sum: Double) -> Double {
let budget = getBudget(distribution: distribution)
return sum / budget
}
func sumPerMemberByBudget(budget: Double) -> Double {
let members = distribution.0
return budget/Double(members)
}
func sumPerMemberByRatio(ratio: Double) -> Double {
let budget = getBudget(distribution: distribution)
return ratio * budget
}
func ratioByMembersCount(members: Int) -> Double{
return Double(members)/100.0
}
func getBudgetBySumPerMember(sum: Double) -> Double {
distribution.1 = sum
let budget = getBudget(distribution: distribution)
return budget
}
/// ... etc
}
我想建立任何属性/结构,专门用作一些智能计算公式。
它应该能够通过将结果放入其中来获得输入值的结果,以及获取输入值。有人有想法吗? 越短越好。如果可能......
答案 0 :(得分:2)
当使用计算属性的时候,这是一个很好的例子。
它不存储值,它只是计算结果。它也设置其他属性(不是直接)。所以让我们间接设置属性。使用变量,您可以像普通的存储属性一样工作。
struct Distribution {
var members = 0, perMember = 0.0
}
struct Plan {
var distribution = Distribution()
var ratio: Double {
get {
return Double(distribution.perMember) / budget
}
}
var budget: Double {
get {
return Double(distribution.members) * distribution.perMember
}
set {
let perMember = newValue * ratio
distribution = Distribution(members: Int(newValue / perMember), perMember: perMember)
}
}
}
我使用结构和更新变量来附加一些输出:
var plan = Plan(distribution: Distribution(members: 4, perMember: 1000.0))
print("\(plan.ratio * 100.0)% ") // 25.0% print(plan.budget) // 4000.0
plan.distribution = Distribution(members: 5, perMember: 900.0)
print("\(plan.ratio * 100.0)% ") // 20.0% print(plan.budget) // 4500.0
plan.budget = 8000.0
print(plan.distribution.perMember) // 1600.0