Convert UnicodeScalar array to string in Swift

I have an array of unicode scanners (Type [UnicodeScalar] )

as:

 let array = [UnicodeScalar("f")!, UnicodeScalar("o")!, UnicodeScalar("o")!] 

or

 let array2 = "bar".unicodeScalars 

how can you efficiently convert these arrays to strings?

Expect:

 let string1 = ?? // "foo" let string2 = ?? // "bar" 
+5
source share
3 answers

The second case is simpler because array2 is a UnicodeScalarView and not an array:

 let array2 = "bar".unicodeScalars let str2 = String(array2) print(str2) // bar 

If you have an array (or any sequence) of Unicode scanners, you can start with an empty line and add elements to the unicodeScalars :

 let array = [UnicodeScalar("f")!, UnicodeScalar("o")!, UnicodeScalar("o")!] // Or: let array: [UnicodeScalar] = ["f", "o", "o"] var str1 = "" str1.unicodeScalars.append(contentsOf: array) print(str1) // foo 

Of course, you can define a custom extension for this purpose:

 extension String { init<S: Sequence>(unicodeScalars ucs: S) where S.Iterator.Element == UnicodeScalar { var s = "" s.unicodeScalars.append(contentsOf: ucs) self = s } } let str1 = String(unicodeScalars: array) 
+6
source

You can use this extension from @dfri to initialize a string from a UnicodeScalar sequence as follows:

 extension Sequence where Iterator.Element == UnicodeScalar { var string: String { return String(String.UnicodeScalarView(self)) } } 

 let array: [UnicodeScalar] = ["f", "o", "o"] print(array.string) // "foo\n" 
+6
source

Another way to convert [UnicodeScalar] to String :

 let array = [UnicodeScalar("f")!, UnicodeScalar("o")!, UnicodeScalar("o")!] let string1 = String(array.map{Character($0)}) print(string1 == "foo") //->true 
+1
source

Source: https://habr.com/ru/post/1270181/


All Articles