Можно ли в языке программирования определить перечисление, которое содержит одновременно встроенное значение и связанное с ним дополнительное значение?
Answer from AI
sobes.tech AI
В Swift можно определить перечисление (enum), которое содержит как встроенное значение (raw value), так и связанное с ним дополнительное значение (associated value). Однако, в стандартном Swift нельзя одновременно использовать raw value и associated values в одном и том же кейсе. То есть, если enum имеет raw value, то его кейсы не могут иметь associated values.
Для обхода этого ограничения обычно используют либо raw value без associated values, либо associated values без raw value. Если нужно хранить и то, и другое, можно реализовать это через вычисляемые свойства или дополнительные структуры.
Пример enum с associated values без raw value:
enum MediaType {
case book(title: String, author: String)
case movie(title: String, director: String)
}
Пример enum с raw value без associated values:
enum Direction: String {
case north = "N"
case south = "S"
case east = "E"
case west = "W"
}
Если нужно совместить, можно сделать так:
enum Status {
case success(code: Int)
case failure(message: String)
var code: Int? {
switch self {
case .success(let code): return code
case .failure: return nil
}
}
}
Таким образом, прямого способа иметь одновременно raw value и associated value в одном enum нет, но можно использовать связанные значения и вычисляемые свойства для хранения дополнительной информации.