swift - Join results of for into one string -
i have places stored in core data in entity called "places" has attribute called "name". current loop return each name works well, , print in console shows of names expected. currently, console shows each 1 on separate line, separate places. possible fetch names each place , store in single string. here current code:
{ let results = try mycontext.executefetchrequest(fetchrequest) as! [places] places in results{ let array = [places.name!].joinwithseparator(", ") print(array) } } catch let error nserror { // failure print("fetch failed: \(error.localizeddescription)") } } here output, on each line (which shows separate objects), i'd them in 1 string (and printed on same line comma separator)
the output printed is: france, germany, poland, hungary, serbia
thank reading, hope can me!
you can use reduce method.
let placenames = results.reduce("") { (placenames, place) -> string in return placenames + place.name + " " } now have single string concatenation of place names.
short notation
you can write follow
let placenames = results.reduce("") { $0 + $1.name + " " } example
lets place defined follow (i using struct class work well)
struct place { let name: string } now let's define results array of place(s)
let results = [place(name: "italy"), place(name: "uk"), place(name: "usa")] and let's test code
let placenames = results.reduce("") { $0 + " " + $1.name } print(placenames) // "italy uk usa " removing last blank space
you maybe have noticed blank space appended @ , of generated string. can rid of updating code follow
let placenames = string( places .reduce("") { $0 + $1.name + " " } .characters .droplast() ) why solution better loop?
the code suggesting here follow functional programming paradigm. there several advantages on classic loop:
- it's thread safe: since using immutable values don't have worry other threads change values while using them.
- it's less error prone because it's more declarative: describing how result should be, not how build it.
that's :)
Comments
Post a Comment