Приведите NSObject of Strings к [String] - PullRequest
0 голосов
/ 29 января 2019

Я застрял, пытаясь привести NSObject строк к [String].Я использую coreData, и мой трансформируемый является NSObject.Раздражает то, что это не перечислимо.Так что мои обычные трюки не работают.Может ли кто-нибудь мне помочь?

Спасибо

{(
  dried,
  stewed
)}

Это должно превратиться в следующее:

[dried, stewed].

Обычный унылость не работает:

  myObject as! [String] :(

Также я заметил, что иногда в сообщении об ошибке говорится, что он не может уменьшить NSObject, а иногда говорится:

Could not cast value of type '__NSSetI' (0x10f101138) to 'NSArray' (0x10f101598).

РЕДАКТИРОВАТЬ: я нашел обходной путь:

let mySet = myObject as! NSSet
let myArr : [String] =  mySet.map { $0 as! String } . // yay!

Я впервые произнес егок множеству, чтобы сделать его перечислимым, а затем я приведу его к [String]

Что интересно, это не работает:

let mySet = myObject as! NSSet 
let myArr = mySet as! [String] // nope.

Ответы [ 3 ]

0 голосов
/ 29 января 2019

Set и Array не одного типа, вы не можете просто приводить их друг к другу.

В идеале вы должны привести тип Objective-C NSSet к Swift Set:

let mySet = myObject as! Set<String>

Если итерацией является ваша единственная цель, то это все, что вам нужно.

Если вам действительно нужен массив, создайте новый массив из набора:

let myArray = Array(mySet)
0 голосов
/ 29 января 2019

Я нашел обходной путь:

let mySet = myObject as! NSSet
let myArr : [String] =  mySet.map { $0 as! String } . // yay!

Сначала я приводил его к набору, чтобы сделать его перечислимым, а затем приводил его к [String]

Что интересно, так этоне работает:

let mySet = myObject as! NSSet 
let myArr = mySet as! [String] // nope.
0 голосов
/ 29 января 2019

Если myObject - это набор (отношение в вашей базовой модели данных), попробуйте выполнить

let arr:[String] = Array(myObject) as! [String]
...