Сценарий:
Я хочу иметь различные типы Облигаций, которые имеют минимальное значение, текущую стоимость облигации с гибким процентом (рассчитанную на основе некоторой логики)и прогноз роста облигаций.
Всякий раз, когда стоимость облигации выходит за рамки минимального значения, прогноз роста становится более благоприятным и наоборот, наоборот.
- Я могу иметьнесколько связей с собственным набором значений.
Я пытаюсь использовать оболочки свойств для одного и того же, чтобы я не повторял одинаковое поведение для каждой связи:
@propertyWrapper
struct BondValue {
private var bondCurrentWorth: Int
private var minimumValue: Int
private var flexiInterest: Int
var projectedValue: BondGrowth = .appreciating // The projected value projects the growth for the bond
var wrappedValue: Int {
get {
return bondCurrentWorth
}
set {
bondCurrentWorth = newValue + (newValue * flexiInterest/100)
projectedValue = bondCurrentWorth < minimumValue ? .depriciating : .appreciating
}
}
init(wrappedValue: Int = 0, minimumValue: Int, flexiInterest: Int, value: Int) {
self.minimumValue = minimumValue
self.flexiInterest = flexiInterest
self.bondCurrentWorth = value
}
}
Нет для создания какой-либо связи, я делаю:
struct FoodBond {
var bondName: String
@BondValue(minimumValue: 200, flexiInterest: 30, value: 200) var value = 30
init(bondName: String, minimumValue: Int, flexiInterest: Int, value: Int) {
self.bondName = bondName
}
}
Постановка задачи: - Я не могу инициализировать значение облигации динамическими значениями.
ВозможноОбход проблемы: Я бы использовал тот же подход, что и обычная структура в приведенной ниже реализации. Хотя этот способ использования оболочки свойств также указан в документах, , но я бы потерял синтаксический вкус оболочек свойств.
Вы можете написатькод, который использует поведение оболочки свойств без использования синтаксиса специальных атрибутов. Например, вот версия SmallRectangle из предыдущего листинга кода, которая явно оборачивает свои свойства в структуру TwelveOrLess вместо записи @TwelveOrLess в качестве атрибута
@propertyWrapper
struct BondValue {
private (set) var bondCurrentWorth: Int
private (set) var minimumValue: Int
private (set) var flexiInterest: Int
var projectedValue: BondGrowth = .appreciating // The projected value projects the growth for the bond
var wrappedValue: Int { .... }
init(wrappedValue: Int = 0, minimumValue: Int, flexiInterest: Int, value: Int) { ... }
}
struct FoodBond {
var bondName: String
var value = BondValue(minimumValue: 0, flexiInterest: 0, value: 0) // Provide a default value
init(bondName: String, minimumValue: Int, flexiInterest: Int, value: Int) {
self.bondName = bondName
self.value = BondValue(minimumValue: minimumValue, flexiInterest: flexiInterest, value: value)
}
}
var foodBond = FoodBond(bondName: "Food Bond", minimumValue: 200, flexiInterest: 10, value: 200)
print("Initial bond current worth - \(foodBond.value.bondCurrentWorth)")
print("Bond growth - \(foodBond.value.projectedValue)")
Любые предложения будут действительно полезны.