norlin
@norlin

Как использовать Array.contains для опциональных типов?

Добрый день!
Задача: выбрать уникальные строки из нескольких массивов, положить эти строки в новый массив, в котором первым элементом должен быть nil.

Я написал такой код:
// item.category = [String]()
var types:[String?] = [nil]
var typeNames = [String]()
        
for (item) in news! {
    for (type) in item.category {
        if (!typeNames.contains(type)) {
            types.append(type)
            typeNames.append(type)
        }
    }
}


Сильно смущает лишний массив typeNames, но .contains на массиве типа [String?] не хочет работать.
Можно ли всё это как-то оптимизировать?

Спасибо!
  • Вопрос задан
  • 347 просмотров
Решения вопроса 1
norlin
@norlin Автор вопроса
В итоге, отказался от запихивания nil в тот же массив, сделал всё через Set<String> + захардкоженый обработчик для nil.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
tikhonov666
@tikhonov666
iOS, Swift, Objective-C
Если нужна уникальность, я бы воспользовался Set, вместо Array и старался бы избегать написания велосипедов.

var uniqueStringSet = Set<String>()
uniqueStringSet.unionInPlace(["Vasa", "Petya", "Gena"])
uniqueStringSet.unionInPlace(["Sasha", "Nikita", "Petya", "Serega", "Vasa"])

print(uniqueStringSet)

let array = Array<String>(uniqueStringSet)
var newArray = array.map{Optional($0)}
newArray.insert(nil, atIndex: 0)
print(newArray)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы