Как добавить новый элемент в мой многотипный массив в Swift

Когда я использую однотипный массив в swift, я могу добавлять элементы в свой массив с различными типами операций (append, + = и т. Д.), Например, этот код работает:

var arr = [1, 2, 3, 4, 5] arr[0...2] = [-1, -2, -3] arr += 6 arr.append(-3) arr += [8, -3, 1, 2] //arr is now [-1, -2, -3, 4, 5, 6, -3, 8, -3, 1, 2] 

но когда я инициализирую свой массив с помощью элементов с несколькими типами, ни одна из них не работает:

 var arr = ["Hello", -3, 4.5, "Hi"] var arr2:AnyObject = ["hi", -3.4, 2] arr[0...2] = [-1, -6.7, "hello"] // Cannot assign to the result of this expression arr.append(1.2) // 'NSArray' does not have a member named 'append' arr += [1, "Error", -3.2] // Could not find an overload for '+=' that accepts the supplied arguments arr2.append("hello") // 'AnyObject' does not have a member named 'append' arr.arrayByAddingObject("This works!") arr2.arrayByAddingObject("This works too!") 

Я понимаю, что когда я использую AnyObject, мой массив становится NSArray (на самом деле NSMutableArray). Как я могу создать обычный swift-массив с типом AnyObject, поэтому я могу использовать полезные операции, такие как '+ =' или такие функции, как append. (Извините за мой плохой английский)

2 Solutions collect form web for “Как добавить новый элемент в мой многотипный массив в Swift”

Вы должны объявить массив как AnyObject[]

 var arr: AnyObject[] = ["Hello", -3, 4.5, "Hi"] var arr2: AnyObject[] = ["hi", -3.4, 2] arr[0...2] = [-1, -6.7, "hello"] arr += "hello" arr.append([1, "Error", -3.2]) arr2 += ["hi", "hiya"] arr2.append("hello") 

Кажется, что есть ошибка, когда вы пытаетесь добавить массив с отрицательным значением с плавающей запятой

 arr += [1, "No Error", 3, -3] arr += [-1, "No Error", 3, 3] arr += -3.2 // no error arr += [1, "Error", -3.2] 

Таким образом, вы можете разрешить свои первые 4 ошибки, объявив массивы как:

 var arr:Array<Any> = ["Hello", -3, 4.5, "Hi"] var arr2:Array<Any> = ["hi", -3.4, 2] arr[0...2] = [-1, -6.7, "hello"] arr.append(1.2) arr += [1, "Error", -3.2] arr2.append("hello") 

Теперь, когда они представляют собой Swift Arrays а не NSArrays , вы не можете вызвать arrayByAddingObject на них.

Кажется, что приведение в NSArray будет работать, но это приводит к сбою компилятора (на игровой площадке).

  • Проблемы с ориентацией на iOS 8: клавиатура заканчивается в неправильном положении
  • Разница между frame.size.width и frame.width
  • Как создать ipa в xcode 6 без учетной записи Apple Developer?
  • Приложение расширения приложений для iOS 8 и Host в отдельных файлах проекта. Возможно ли это в Xcode 6?
  • Jenkins xcode plugin stringRep должен быть непустой строкой, но это пустая строка
  • iOS 8 Xcode 6: В чем смысл скрытых ограничений?
  • 'ld: file not found' после изменения имени продукта в Xcode
  • Не удалось импортировать ошибку заголовка заголовка
  • Как бороться с обновлением Xcode, чтобы рекомендовать предупреждение о настройке?
  • Как удалить ограничение, которое уже установлено в раскадровке Xcode
  • Не работает дистрибутив Xcode 6
  • Interesting Posts

    Где XCode-боты помещают исходный код после клонирования из репозитория?

    Заголовок ответа от AVPlayer

    Как iOS решает, какое текстовое поле будет фокусироваться дальше, когда вы нажимаете клавишу Tab на симуляторе?

    Программирование iPhone – передача NSMutableArray между контроллерами представления

    Быстрая прокрутка UICollectionView отображает неправильные изображения в ячейке, когда новые элементы добавляются асинхронно

    Предупреждение об ограничениях в консоли, я не могу понять

    UIKeyboardWillChangeFrameNotification UIViewAnimationCurve установлен на 7 на iOS 7

    iOS – Обновление метки во время перехода анимации?

    IOS 6 NSDateFormatter

    Что делать, если я не могу найти заголовок GPUImage.h для рамки GPUImage?

    Как заставить пользователя включить службы геопозиционирования …

    didSelectRowAtIndex не вызывается для WKInterfaceTable

    Что это значит? «NSUnknownKeyException», причина: … этот класс не является ключевым значением, совместимым с кодировкой для ключа X "

    Блок подписки RxSwift не называется

    Очистить файлы cookie для данного приложения iOS

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.