gpt4 book ai didi

swift - 使用带有 getter 和 setter 的类或结构来计算关系的属性

转载 作者:行者123 更新时间:2023-11-28 12:41:41 24 4
gpt4 key购买 nike

我想用更聪明的东西、使用结构或任何看起来简单的解决方案来取代我的丑陋。

我的类中有很多方法可以组合,但我不喜欢它。

为了想象,我创建了一个类,里面有一些方法。

一个例子是关于成员数量、谁和分配的预算之间的关系:

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
}

我想建立任何属性/结构,专用于像一些智能计算公式一样的服务。

它应该能够从输入值中获取结果,以及通过将结果放入其中来获取输入值。有人会有想法吗?越短越好。如果可能...

最佳答案

这是使用计算属性的好时机。

它不存储值,它只是计算结果。它还设置其他属性(不是直接设置)。因此,让我们间接设置属性。使用变量,您可以像使用普通存储属性一样工作。

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

关于swift - 使用带有 getter 和 setter 的类或结构来计算关系的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39299229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com