Я пишу библиотеку, которая может анализировать типизированные идентификаторы из JSON. Тем не менее, я считаю, что правила приведения типов немного озадачивают.
Пример:
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
Почему первый тип будет успешным, а второй - неудачным? Есть ли что-то волшебное в NSString
, которое не пересекает классы Swift?
Я использую XCode Version 6.1 (6A1030) (последний на момент написания).