Wiem, jak to zrobić programowo, ale jestem pewien, że istnieje wbudowany sposób ...
Każdy język, którego użyłem, ma domyślną reprezentację tekstową dla kolekcji obiektów, którą wypluje, gdy spróbujesz połączyć tablicę z łańcuchem lub przekazać ją do funkcji print () itp. Czy język Apple jest szybki masz wbudowany sposób łatwego przekształcania tablicy w ciąg znaków, czy też zawsze musimy jawnie określać tablicę?
array.description
lub jeśli chcesz niestandardowy separatorarray.joined(separator: ",")
Odpowiedzi:
Jeśli tablica zawiera ciągi, można korzystać z
String
„sjoin
metody:W Swift 2 :
Może to być przydatne, jeśli chcesz użyć określonego separatora (myślnik, spacja, przecinek itp.).
W przeciwnym razie możesz po prostu użyć
description
właściwości, która zwraca ciąg znaków reprezentujący tablicę:Wskazówka: każdy obiekt implementujący
Printable
protokół madescription
właściwość. Jeśli zastosujesz ten protokół we własnych klasach / strukturach, uczynisz je również przyjaznymi do drukowaniaW Swift 3
join
staje sięjoined
przykładem[nil, "1", "2"].flatMap({$0}).joined()
joinWithSeparator
staje sięjoined(separator:)
(dostępne tylko dla Array of Strings)W Swift 4
źródło
"-".join(array)
nie jest już dostępny w Swift 2, Xcode 7 Beta 6, spróbuj użyćarray.joinWithSeparator("-")
joinWithSeparator
jest dostępna tylko dla tablicy ciągów. Jeśli masz tablicę innych obiektów, użyjmap
najpierw. Na przykład[1, 2, 3].map({"\($0)"}).joinWithSeparator(",")
W Swift 5, w zależności od potrzeb, możesz wybrać jeden z poniższych przykładowych kodów Placu Zabaw, aby rozwiązać problem.
Przekształcanie tablicy
Character
s wString
separator bez:Przekształcanie tablicy
String
s wString
separator bez:Przekształcanie tablicy
String
s wString
separator między słowami:Przekształcanie tablicy
String
s wString
separator między znakami:Przekształcanie tablicy
Float
s wString
separator między liczbami:źródło
try JSONDecoder().decode([Int].self, from: Data(string.utf8))
Swift 2.0 Xcode 7.0 beta 6 i nowsze zastosowania
joinWithSeparator()
zamiastjoin()
:joinWithSeparator
jest zdefiniowany jako rozszerzenie naSequenceType
źródło
Szybki 3
źródło
W Swift 4
źródło
Ponieważ nikt nie wspomniał o zmniejszeniu, oto on:
W duchu programowania funkcjonalnego 🤖
źródło
[0,1,1,0].map{"\($0)"}.reduce("",+)
. 😉[0,1,1,0].map(String.init).joined()
Aby zmienić tablicę ciągów opcjonalnych / nie opcjonalnych
Tutaj flatMap , compactMap pomija wartości zero w tablicy i dołącza inne wartości, aby dać połączony ciąg.
źródło
Mój działa na NSMutableArray ze składnikamiJoinedByString
źródło
W Swift 2.2 może być konieczne rzutowanie tablicy na NSArray, aby użyć składnikówJoinedByString („,”)
źródło
Jeśli chcesz porzucić puste ciągi w tablicy.
Jeśli chcesz również filtrować wartości zerowe:
źródło
Rezultatem będzie >>> Mani Singh iOS Developer
źródło
Szybkim odpowiednikiem tego, co opisujesz, jest interpolacja ciągów. Jeśli myślisz o takich rzeczach jak JavaScript
"x" + array
, odpowiednikiem Swift jest"x\(array)"
.Ogólnie rzecz biorąc, istnieje istotna różnica między interpolacją łańcuchów a
Printable
protokołem. Tylko niektóre klasy są zgodnePrintable
. Każda klasa może być w jakiś sposób interpolowana przez łańcuch. Jest to pomocne podczas pisania ogólnych funkcji. Nie musisz ograniczać się doPrintable
zajęć.źródło
Możesz wydrukować dowolny obiekt za pomocą funkcji drukowania
lub użyj
\(name)
do konwersji dowolnego obiektu na ciąg.Przykład:
źródło
Utwórz rozszerzenie dla
Array
:źródło
Separator może być złym pomysłem w przypadku niektórych języków, takich jak hebrajski lub japoński. Spróbuj tego:
Odpowiednio dla innych typów danych:
źródło
jeśli masz listę tablic łańcuchowych, przekonwertuj na Int
da ci wartość ciągu
źródło
dla dowolnego typu elementu
źródło
Spróbuj tego:
źródło
DLA SWIFT 3:
źródło
Jeśli pytasz, to coś takiego: tobeFormattedString = ["a", "b", "c"] Output = "abc"
String(tobeFormattedString)
źródło
String
nie ma inicjatora zdolnego do tego. Albo korzystasz z niestandardowego rozszerzenia lub biblioteki innej firmy, albo po prostu się mylisz.