2014-10-31 1 views
2

Я хочу создать массив из разделения текста, а затем удалить все элементы, которые я хочу. Фрагмент кода не компилируется, потому что он не изменен. Что мне делать?swift: как разбить строку и удалить первый элемент?

var a = [] 
// ... 
a = split(text, { $0 == "\n"}, maxSplit: Int.max, allowEmptySlices: false) 
let sentence = a.removeAtIndex(0) 
+0

'a' изменчиво и что код компилируется (и работает) без проблем для меня. –

+0

@Martin R, я обновил вопрос, чтобы представить код, который делает компиляцию наружу. –

ответ

4
var a = [] 

определяет a как NSArray, и что не имеет removeAtIndex(). Замена, что с

var a : [String] 

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

var a = split(text, { $0 == "\n"}, maxSplit: Int.max, allowEmptySlices: false) 
+0

Спасибо. И есть ли способ установить NSMutableArray прямо в swift? Дополнительный вопрос: есть ли какой-либо штраф за производительность или преимущество, чтобы придерживаться быстрого массива или NSArray? –

+0

@ StéphanedeLuca массивы, созданные с помощью 'var' в swift, изменяются с момента создания,' let' определяет неизменность. 'var a: [String]' на самом деле является быстрым массивом, который является взаимозаменяемым с Objective-C. Что касается штрафа за производительность, я не уверен, однако я понимаю, что всегда лучше идти с неизменяемыми объектами (было в разговоре с WWDC) для быстрых массивов https://developer.apple.com/library/mac/documentation/Swift/Conceptual /Swift_Programming_Language/CollectionTypes.html – sbarow

0

Изменить объявление массива?

var a = Array<String>() 
let text = "this has \nsome words" 
a = split(text, { $0 == "\n"}, maxSplit: Int.max, allowEmptySlices: false) 
let sentence = a.removeAtIndex (0) 
print(a) 

печатает «[некоторые слова]»

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

  • Нет связанных вопросов^_^