-2

I am trying to dynamically chop an array of letters but I can't seem to reconvert the result back into a [String]

let letters:String = "abcdefghijklmnopqrstuvwxyz"
let lettersarray = Array(letters.characters)

var targetNum = 14 // Show just the first 14 characters

var resultsArray = [String]()

let resultsSlice = lettersarray.dropLast(lettersarray.count - targetNum) // Returns an Array Slice instead of an Array

let newresultsArray = Array(resultsSlice) // Returns Array<_element> instead of [String]

How do I return a [String] ie ["a","b","c"... eg]

UKDataGeek
  • 6,338
  • 9
  • 46
  • 63

3 Answers3

3

You need to map the Character array back to String

let resultsArray = lettersarray.dropLast(lettersarray.count - targetNum).map{String($0)}

alternatively (credits to Leo Dabus)

let letters = "abcdefghijklmnopqrstuvwxyz"
let targetNum = 14
let resultsArray = letters.characters.prefix(targetNum).map{String($0)}
vadian
  • 274,689
  • 30
  • 353
  • 361
2

No need for an array here. It's hard to understand what you're trying to do, but if you just want the first 14 characters of a string, use the prefix method:

    let s = String("abcdefghijklmno".characters.prefix(14))
matt
  • 515,959
  • 87
  • 875
  • 1,141
0

Assuming that you are getting a String and want an array of characters which is a slice of characters from that String, you could use Swift's Half-Open Range Operator found here.

let letters:String = "abcdefghijklmnopqrstuvwxyz"
let lettersArray = Array(letters.characters)
let targetNum = 2
let resultsArray = lettersArray[0..<targetNum]

This will give you an ArraySlice<Character>. If you want an Array<Character> you could do this:

let resultsArray:Array<Character> = Array(lettersArray[0..<targetNum]) // ["a","b"]
nbarbosa
  • 1,652
  • 1
  • 12
  • 10