Сегодня кто-то прокомментировал этот код и предположил, что было бы лучше в enum
:
typealias PolicyType = (filename: String, text: String)
struct Policy {
static let first = PolicyType(filename: "firstFile.txt", text: "text in first file")
static let second = PolicyType(filename: "secondFile.txt", text: "text in second file")
static let third = PolicyType(filename: "thirdFile.txt", text: "text in third file")
}
let thirdPolicyText = Policy.third.text
Есть ли более эффективный для памяти и поддерживаемый способ сделать это с помощью enum?Моя основная цель - ремонтопригодность.
Ниже приводится то, что я придумал:
enum Policy: RawRepresentable {
case one
case two
case three
var rawValue: (filename: String, text: String) {
switch self {
case .one:
return ("1", "policy 1 text")
case .two:
return ("2", "policy 2 text")
case .three:
return ("3", "policy 3 text")
}
}
init?(rawValue: (filename: String, text: String)) {
switch rawValue {
case ("1", "policy 1 text"):
self = .one
case ("2", "policy 2 text"):
self = .two
case ("3", "policy 3 text"):
self = .three
default:
return nil
}
}
}
На данный момент я выяснил, как добиться аналогичной функциональности с struct
и enum
.enum
кажется гораздо более сложным, если кто-то возвращается, чтобы обновить его, и он более подвержен ошибкам.Пол Хегарти говорит, что строка, которая не потерпит крах, - это строка, которую вы не пишете, а маршрут enum
выглядит и кажется громоздким.
Есть ли преимущество в памяти для перехода по маршруту enum
по сравнению с struct
?
Когда я закончу, я хотел бы иметь возможность передавать Политику в качестве параметра, например, так:
func test(for policy: Policy) {
print(policy.rawValue.filename)
print(policy.rawValue.text)
}
test(for: Policy.first)