Я думаю, что ответ "не делай этого", но здесь идет ... Подумайте:
class Enemy {
var name: String
var type: Int
init(ofType: Int) {
type=ofType
}
}
У меня есть два типа врагов: friends = 0 и closeFriends = 1.Враги могут переключаться между ними в любое время.Итак:
var newEnemy = Enemy(ofType:.closeFriend)
newEnemy.name = "Bob"
и, возможно, когда-нибудь в будущем:
newEnemy.type = .friend
Но я нахожу этот синтаксис несколько непрозрачным.По той же причине, по которой лучше использовать enum
вместо Int
, ваши намерения станут более ясными, если вы создадите новые объекты, которые непосредственно представляют их тип, возможно:
var newEnemy = CloseFriend(withName:"Bob")
Обычно этотребует создания подкласса Friend и CloseFriend, но тогда нельзя просто превратить Friend в CloseFriend.
typealias
кажется, что это может быть решением, я мог бы псевдоним Enemy to Friend и CloseFriend.Но это не добавляет новый init, который устанавливает type
на основе псевдонима.Например, CloseFriend () должен установить тип равным 1 без необходимости его указания.Есть ли способ сделать это?