将无名元组的字符串表示转换为元组。

8

我知道这可能很简单,但是我刚接触 Swift ,需要尽可能多的帮助。

我有一个字符串,在打印时显示为"(示例1","示例2)"
现在,如果我将其赋值给一个变量,我无法调用元组中的单个元素,因为显然它不是一个tuple

现在我想知道是否有一种方法可以将其转换为tuple,也许使用JSONSerialization

我尝试了 let array = try! JSONSerialization.jsonObject(with: data, options: []) as! Array<Any>,
对于字符串"["Example 1", "Example 2"]",它可以工作,但不适用于元组,我试图更改options:中的[](),但那没有起作用。


你正在尝试从数组创建元组?很难理解你需要什么。 - Tj3n
我有一个字符串,如果去掉第一个 " 和最后一个 ",它就是一个元组,但你不能简单地用字符串替换来去掉它们。我想把 "("Example 1", "Example 2")" 改成 ("Example 1", "Example 2") - Will
所以基本上你想从一个字符串中创建一个元组?将"("Example 1", "Example 2")"转换为包含"Example 1""Example 2"的元组? - Tj3n
1
字符串从哪里来?为什么元组被存储成那样?单个字符串是否可以包含括号、逗号或引号?您是否考虑使用不同的格式(如JSON)? - Martin R
1个回答

4

根据我的理解,您想将一个看起来像元组的字符串创建为元组。因此,您需要提取该字符串中的值并创建一个元组。

如果您总是确定格式相同,则可以使用以下简单解决方案。

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])
}

那么你可以像这样使用它

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

1
如果字符串本身包含括号或逗号怎么办?- 试试用 let string = "(\"A(B)C\", \"D, E\")" - Martin R
是的,这样做可以解决问题,但如果字符串包含逗号呢? - Will

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接