У меня есть следующие черепичные перечисления.
public enum Icons {
public enum Arrow: String {
case Angle1 = "\u{f100}"
case Angle2 = "\u{f101}"
case Angle3 = "\u{f102}"
case Angle4 = "\u{f103}"
case ArrowBottomLeft = "\u{f104}"
case ArrowBottomRight = "\u{f105}"
}
public enum Clothing: String {
case BallCap = "\u{f100}"
case Belt = "\u{f101}"
case Boot = "\u{f102}"
case BowTie = "\u{f103}"
}
public enum Emotions: String {
case Angel = "\u{f100}"
case AngrySick = "\u{f101}"
case Angry = "\u{f102}"
case Bitter = "\u{f103}"
case Concerned = "\u{f104}"
case Cool = "\u{f105}"
}
}
У меня есть огромная коллекция иконок, которые я хочу интегрировать в свое приложение. У меня также есть инициализатор расширения UIImage, который принимает UIFont в качестве параметра и строку для отрисовываемого значка (исходя из Icons.Category.Icons
— обратите внимание, что в этом случае категорией является либо стрелка, либо одежда, либо эмоции).
Чтобы получить значок, я звоню:
let image = UIImage(
fromIcon: Icons.Emotions.Angel.rawValue,
withFont: UIFont.iconFontAngel(22)
)
Каждый из трех типов значков имеет связанное расширение UIFont:
- Тип стрелки имеет
UIFont.iconFontArrow(size)
- Тип одежды имеет
UIFont.iconFontClothing(size)
- Тип эмоций
UIFont.iconFontEmotions(size)
Как я могу лучше объявить значки, чтобы включить UIFont, размер шрифта и другие параметры, специфичные для категории, поскольку я точно знаю, какой UIFont соответствует каждой категории, и мне нужно передать только один параметр, такой как Icons.Arrow.Angle3
, в инициализатор UIImage и извлечь из этот параметр типа строки, UIFont и другие необходимые параметры?
Я думал о том, чтобы объявить тип значков установленным, но я не уверен, как решить это чистым образом.
let icon = Icons.Arrow.Angle3; icon is Icons.Clothing //will return true while; icon is Icons.Emotions //will return false
) - person beyowulf   schedule 16.02.2016