2016-12-20 52 views
8

Wiem, że to może być łatwe, ale jestem bardzo nowy w stosunku do Swift i potrzebuję wszelkiej pomocy, jaką mogę uzyskać.Konwertuj reprezentację ciągów bezimiennej krotki, na krotkę

Mam ciąg znaków, który po wydrukowaniu pokazy, "("Example 1", "Example 2")"
Teraz gdybym przypisać do zmiennej, nie mogę nazwać poszczególne elementy w tuple, jak to wyraźnie nie jest tuple.

Teraz chciałbym wiedzieć, czy istnieje sposób konwersji na tuple, być może z JSONSerialization?

Próbowałem let array = try! JSONSerialization.jsonObject(with: data, options: []) as! Array<Any>,
i że działa z ciągiem "["Example 1", "Example 2"]", ale nie krotką, próbowałem zmienić [] w options: do (), ale to nie działa.

+0

próbujesz dokonać krotki z tablicy? trudno zrozumieć, czego potrzebujesz – Tj3n

+0

Mam ciąg, który bez pierwszego '' 'i ostatniego' '', byłby to krotka, ale nie można pozbyć się tych z prostym zastąpieniem ciągu. Chcę zmienić '" ("Przykład 1", "Przykład 2") "' -> "(" Przykład 1 "," Przykład 2 ")' – Will

+0

Więc zasadniczo próbujesz utworzyć krotkę z ciągu znaków? '" ("Przykład 1", "Przykład 2") "' do krotki z '" Przykład 1 "' i '" Przykład 2 "'? – Tj3n

Odpowiedz

4

w oparciu o to, co rozumiem, że chcesz utworzyć krotkę z ciągu, który wygląda podobnie jak krotka. więc musisz wyodrębnić wartości z tego łańcucha i utworzyć krotkę.

tutaj jest proste rozwiązanie, jeśli jesteś zawsze upewnić się, że format jest taki sam

func extractTuple(_ string: String) -> (String,String) { 
    //removes " and (and) from the string to create "Example 1, Example 2" 
    let pureValue = string.replacingOccurrences(of: "\"", with: "", options: .caseInsensitive, range: nil).replacingOccurrences(of: "(", with: "", options: .caseInsensitive, range: nil).replacingOccurrences(of: ")", with: "", options: .caseInsensitive, range: nil) 

    let array = pureValue.components(separatedBy: ", ") 
    return (array[0], array[1]) 
} 

wtedy można go używać jak to

let string = "(\"Example 1\", \"Example 2\")" 
let result = extractTuple(string) 
print(result) 
+1

Co zrobić, jeśli same ciągi zawierają nawiasy lub przecinki? - Wypróbuj za pomocą 'let string =" (\ "A (B) C \", \ "D, E \") "' –

+0

Tak to działa, ale co jeśli łańcuch zawiera przecinek? – Will