Здесь вам нужно использовать переключатель:
switch position {
case .top(let f):
// use f
case .middle(let f):
// use f
case .bottom(let f):
// use f
}
Если вы хотите его как выражение , вы можете сделать что-то вроде:
// you can assign the below to a variable or whatever
// let value =
{ () -> CGFloat in
switch position {
case .top(let f):
return f
case .middle(let f):
return f
case .bottom(let f):
return f
}
}()
Однако , Я думаю, что лучшее решение - изменить дизайн ваших типов. Кажется, что всегда будет CGFloat
, связанный с каждым случаем вашего перечисления. Почему бы не использовать структуру, составляющую простое перечисление и CGFloat
?
enum RelativeCardPosition {
case top
case middle
case bottom
}
struct CardPosition {
let relativeCardPosition: RelativeCardPosition
let offset: CGFloat
static func top(_ offset: CGFloat) -> CardPosition {
CardPosition(relativeCardPosition: .top, offset: offset)
}
static func middle(_ offset: CGFloat) -> CardPosition {
CardPosition(relativeCardPosition: .middle, offset: offset)
}
static func bottom(_ offset: CGFloat) -> CardPosition {
CardPosition(relativeCardPosition: .bottom, offset: offset)
}
}
Тогда вы можете легко получить доступ к номеру через position.offset
.