Не удалось привести значение типа "Swift.Array‹(Swift.String, Swift.String)›" к "Swift.AnyObject"

Мой код swift выглядит следующим образом:

Family.arrayTuple:[(String,String)]? = []
Family.arrayTupleStorage:String?
Family.arrayTupleStorage:String = (newDir! as NSString).stringByAppendingPathComponent("arrayTuple.archive")
NSKeyedArchiver.archiveRootObject(Family.arrayTuple! as! AnyObject, toFile: Family.arrayTupleStorage!)

У меня сообщение об ошибке в окне консоли при сборке кода.

«Не удалось преобразовать значение типа Swift.Array‹(Swift.String, Swift.String)>» (0xcce8098) в Swift.AnyObject (0xcc8f00c).

Как я могу заархивировать Family.arrayTuple и разархивировать Family.arrayTupleStorage?


person WoderMan    schedule 04.02.2016    source источник
comment
Вы не можете архивировать кортежи с помощью NSKeyedArchiver: stackoverflow.com/ вопросы/28929897/   -  person Eric Aya    schedule 04.02.2016
comment
NSKeyedArchiver — это просто контекст для фактической ошибки здесь: вы не можете привести кортеж к AnyObject: кортежи являются типами значений и AnyObject может (только) представлять экземпляр любого типа класса. Следующее приведет к той же ошибке: var foo = (1, 2), var bar = foo as! AnyObject. Однако вы можете привести целое число (var foo = 1 выше) к AnyObject: это немного вводит в заблуждение, поскольку AnyObject внутренне хранит int как экземпляр класса (__NSCFNumber).   -  person dfrib    schedule 04.02.2016
comment
Я могу решить проблему! хороший совет — stackoverflow.com/questions/28929897/… — Эрик Д. вчера спасибо!!   -  person WoderMan    schedule 06.02.2016


Ответы (1)


person    schedule
comment
намного проще использовать массив, а не кортеж для пользовательских значений по умолчанию ;-) - person vadian; 07.02.2016
comment
ваше мнение верно. но приведенный выше код заменяет код кортежа массива. Я использую приведенный выше код в своем кортеже массива - person WoderMan; 07.02.2016