Приведение синтаксиса для циклической обработки массива массивов в Swift - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть NSArray, состоящий из NSArrays строк, созданных в Objective-C.

Теперь я хочу перебрать элементы в массиве в быстром классе и у меня возникают проблемы с синтаксисом.

Исходный массив массивов Objective-C выглядит следующим образом:

NSArray* shapes =@[@[@"square",@"square.png"],@[@"circle",@"circle.png"],@[@"square",@"square.png"]];

Я могу получить и распечатать массив из класса Objective-C, используя:

let shapes:Array = Utilities.sharedInstance().getShapes

Следующие циклы в массиве, однако, не компилируются:

var term : String = ""
var pic : String = ""
for shape in shapes  {
term  = shape[1] //ERROR HERE
pic = shape[2] //SAME ERROR HERE
            }

Выдает ошибку: Type 'Any' has no subscript members

Какой правильный синтаксис для цикла используетсяэлементы?

1 Ответ

0 голосов
/ 16 декабря 2018

Вы можете попробовать

 let shapes = Utilities.sharedInstance().getShapes as! [[String]]

Ваши Array элементы имеют тип Any, поэтому вы не можете использовать [] с ними, пока не произнесете, это всегда имеет место, когда вы используете мостовой код изцель-c, поэтому вы должны быть конкретны в отношении фактического типа, который вы используете, также я рекомендую

struct Item {
   let term,pic:String
}

Затем

let res:[Item] = shapes.map { Item(term:$0[0],pic:$0[1]) }

неуместное примечание, но важное, которое вы можете сделать

NSArray* shapes = @[@"square",@"circle",@"square"];

тогда вопрос добавления .png прост вместо того, чтобы иметь [[String]] напрямую, это [String]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...