// the type without a String
let type1 = WSCLogin.self
// the type with a String, without extension
let mail = WSCLogin(rawValue: "mail")
let type2 = type(of: mail)
// the type with a String, with extension
extension WSCLogin {
var kind: WSCLogin.Type {
return type(of: self)
}
}
let type3 = WSCLogin(rawValue: "mail")?.kind
Поскольку мы инициализируем WSCLogin
через инициализатор RawRepresentable
, мы всегда получаем тип Optional
.Вам просто нужно сначала развернуть.
Обратите внимание, что вы не можете использовать type
или Type
в качестве имени свойства, поскольку в обоих случаях вы столкнетесь с конфликтами имен.С помощью обратных галочек, таких как
var `type`: WSCLogin.Type
, вы можете принудительно назначить именование, но в этом случае вы переопределяете функцию type()
, которую вы используете в этом вычисляемом свойстве.