Home > database >  Merge Array of String - No exact matches in call to subscript
Merge Array of String - No exact matches in call to subscript

Time:03-26

I'm getting an Xcode error

Global function 'zip' requires that 'String.Element' (aka 'Character') conform to 'Sequence'

on array[i] = zip(array[i], arrayOfZeros)

func expandedForm(_ num: Int) -> String {
  
    let lenght = String(num).count
    var array = Array(String(num))
    
    var i = 0
    while array.count > i {
        
        let numberOfZeros = array.count - 1 - i
        let arrayOfZeros = Array(repeating: "0", count: numberOfZeros)
        let string = array[i]
        array[i] = zip(array[i], arrayOfZeros)
        i  = 1
    }
    
    return ""
}

I'm trying to merge two array of strings, but I think they are not the same type. Need some help on this.

CodePudding user response:

func expandedForm(_ num: Int) -> String {
  
    let lenght = String(num).count
    var array = Array(String(num))
    
    var i = 0
    while array.count > i {
        
        let numberOfZeros = array.count - 1 - i
        let arrayOfZeros = Array(repeating: "0", count: numberOfZeros)
        let string = array[i]
        array[i] = zip(array[i], arrayOfZeros)
        i  = 1
    }
    
    return ""
}

You have some issues.

var array = Array(String(num)), if you pass your cursor on array, it's a [String.Element], ie a [Character], an array a Character.

So let string = array[i], that's misleading, because array[i] is a Character, not a String.

zip(_:_:) awaits for two sequences (~array), and you give as first parameter a Character.

Possible solutions:

Make array, a real array of String:

var array = Array(String(num)).map { String($0) }

And then:

array[i] = array[i]   arrayOfZeros.joined()

Or create a new variable var output that will be an array of String:

var output: [String] = []

And populate it:

output.append(String(array[i]   arrayOfZeros.joined())
  • Related