Tipografia em Swift

Estou escrevendo uma biblioteca que pode analisar Ids digitados em JSON. No entanto, estou achando as regras da seleção de papéis um pouco desconcertante.

Exemplo:

class AccountId : NSString { }

let json : AnyObject? = "user-1" // Returned by NSJSONSerialization.JSONObjectWithData
let s = json as? NSString   // Succeeds, s == Some("user-1")
let a = json as? AccountId  // Fails, a == nil

Por que o primeiro typecast é bem-sucedido enquanto o segundo falha? Existe algo mágico sobreNSString que não passa para classes somente Swift?

Estou usando o XCode versão 6.1 (6A1030) (o mais recente no momento da redação).

questionAnswers(2)

yourAnswerToTheQuestion