2014-06-13 2 views
5

я получил следующую переменную определенной:Не удалось найти перегрузку «__conversion», который принимает переданные аргументы, добавить несколько элементов массива

var mapHorizontalConstraints:Array = Array<NSLayoutConstraint>() 

позже, когда я пытаюсь установить значение моего ограничения массива с помощью визуального форматирования языка следующим образом:

mapHorizontalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("|-0-[mapView]-0-|", 
     options: NSLayoutFormatOptions(0), 
     metrics: nil, 
     views: ["mapView":mapView]) 

Я получаю «не удалось найти перегрузку„__conversion“, который принимает переданные аргументы», с немного стрелка, указывающая на "=" знак в выше уступки.

Я считаю, это связано с тем, что мы не можем добавить массив, используя "=". Если бы я мог добавить несколько элементов, используя функцию массива append(), я бы попробовал это, но, как вы знаете, append() просто принимает один единственный элемент.

Так просто интересно, если это моя проблема, и если да, то как добавить несколько элементов в массив в Swift?

ответ

6

Вы не можете установить переменную типа Array, вам нужно явно выписать тип, например:

var mapHorizontalConstraints:Array<NSLayoutConstraint> = ...

или более просто,

var mapHorizontalConstraints: [NSLayoutConstraint] = ...

Как уже упоминалось в комментарии, NSLayoutConstraint.constraintsWithVisualFormat возвращает [AnyObject]!

Таким образом, когда вы назначаете его, вы должны, как это обратное приведение:

mapHorizontalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("|-0-[mapView]-0-|", 
     options: 0, 
     metrics: nil, 
     views: ["mapView":mapView]) as [NSLayoutConstraint] 

Вы можете добавить к нему с оператором +=.

+0

Я заметил, что 'NSLayoutConstraint.constraintsWithVisualFormat' возвращает' AnyObject [] '. Сливает ли Swift приведение в' Array '? – Palpatim

+0

@Palpatim check edit:], это, безусловно, rec ommended way – Jack

+0

@Palpatim А также вы можете добавить этот способ, вызвав '+ =' на любой объект типа 'NSLayoutConstraint' или' NSLayoutConstraint [] ' – Jack

1

попробовать это

var mapHorizontalConstraints:AnyObject[] = [] 

установить использовать '=' оператор, добавить в массив '+ =', как в

mapHorizontalConstraints += [obj1, obj2, obj3] 
0

На самом деле, вы можете добавить несколько элементов в массив с оператором + =, например

array += [4,5,6] 

(пример взят из Swift Standard Library Reference

Но есть другой вопрос:. NSArray *, что вы получите обратно проступает в быстры как AnyObject[], который затем необходимо обратное приведение в порядке для использования. См. раздел «Типы данных какао» в документе «Использование Swift с документом Cocoa и Objective-C» от ​​Apple.

Смежные вопросы

 Смежные вопросы