2015-02-19 5 views
0

Для моего проекта я извлек твиты из файла CSV в Swift. Проблема в том, что теперь все твиты анализируются как один элемент в массиве, разделенный символом «,».Convert [String]? to String in Swift

let tweetsOfColumns = columns["tweet"] 
let seperatedColumns = tweetsOfColumns.componentsSeparatedByString(",") 

Сообщение об ошибке: "[String]? не имеет члена с именем 'componentsSeparatedByString'.

Я проверил, если твитыОфисные элементы содержат несколько элементов, но это не позволяет мне индексировать с помощью твитовOfColumns [index].

+0

показать здесь "tweetsOfColumns" здесь. –

+0

tweetsOfColumns - это всего лишь куча тестовых твитов, твитов с ручкой, хэштегами и контентом. @dasblinkenlight Все твиты сохраняются как один элемент массива. Кажется, я не могу получить доступ к твитам индивидуально. Я хотел бы сделать некоторое регулярное выражение для них, чтобы извлечь дескрипторы, хэштеги и т. Д. –

+0

Показать объявление/создание столбцов. Моя догадка из сообщения об ошибке состоит в том, что это '[String: [String]]', а не '[String: String] ', поскольку ответы, похоже, предполагают. В этом случае необязательная развертка приведет вас к '[String]', который не нужно передавать в 'componentsSeparatedByString', потому что он уже разделен. –

ответ

0

Глядя на ссылку вы ссылаетесь, columns["tweets"] собирается дать вам обратно массив значений из «твитов» колонки, так это то, что вам нужно уже, нет никаких дополнительных запятая, чтобы разделить вещи на, вам просто нужно:

let seperatedColumns = columns["tweet"] 

, чтобы иметь массив, содержащий столбец твита для каждой строки.

+0

Да, это все, спасибо вам за вашу быструю помощь и советы. –

+0

Не забудьте принять ответ, если он подходит и ответил на ваш вопрос. (Нажмите галочку рядом с ответом). Это дает людям больше стимулов отвечать на вопросы в будущем. –

0

При попытке получить элемент из словаря, как

columns["tweet"] 

это даст Вам дополнительный, потому что если нет ничего, связанное с ключом, это дает вам обратно ноль (Нет), в противном случае значение обернуто в необязательный (некоторые (данные)). Таким образом, вы должны разворачивать дополнительный, например:

columns["tweet"]! 
0

Вы должны либо использовать дополнительный ? для доступа к строке:

let seperatedColumns = tweetsOfColumns?.componentsSeparatedByString(",") 

Но вы должны разворачивать его:

if let unwrappedTweets = tweetsOfColumns?.componentsSeparatedByString(","){ 
    let seperatedColumns = unwrappedTweets 
} 
+0

Если я попытаюсь развернуть его в любом случае, сообщение об ошибке продолжается: '[String]' не имеет члена с именем 'componentsSeparatedByString' –

0

Проблема, вероятно, в том, что вы получите дополнительную опцию, которую вы должны развернуть. И самым простым и изящным является использование if-let-распаковщика.

if let tweetsOfColumns = columns["tweet"] { 
    let seperatedColumns = tweetsOfColumns.componentsSeparatedByString(",") 
    // do something with the seperatedColumns 
} 
0

Основываясь на вопрос Дэвида и ответ ФП в комментариях О.П., вы можете использовать карту на массив, возвращаемый столбцов [ «чирикать»]. Пожалуйста, разместите фактические данные/код в будущем.

let columns = [ 
    "tweet":["handleX,tag1,tag2,textA,textB", 
      "handleY,tag1,tag2,textC,textD"]] 

var chunk = [[String]]() 
if columns["tweet"] != nil { 
    chunk = columns["tweet"]!.map { 
     return $0.componentsSeparatedByString(",") 
    } 
} 

enter image description here