简体   繁体   English

Swift将一个字符串作为数组转换为字符串数组

[英]Swift Convert A String-As-An-Array, To An Array Of Strings

I have a string: 我有一个字符串:

"["word1","word2"]"

And I want a simple way to convert it to an actual [String] . 我想要一种简单的方法将其转换为实际的[String]

All the other questions I could dig up on there were about converting int strings to arrays. 我能从中挖掘出的所有其他问题都与将int字符串转换为数组有关。

I tried doing 我试着做

Array(arrayLiteral: "["word1","word2"]")

But I get 但是我明白了

["[\\"word1\\",\\"word2\\"]"]

Manually cleaning up the edges and removing the slashes seems like I'm doing something very wrong. 手动清理边缘并去除斜线似乎是我做错了什么。

I'm curious if there's a simple way to convert a an array of strings as a string into an array of strings. 我很好奇是否有一种简单的方法可以将字符串数组作为字符串转换为字符串数组。

ie Convert "["word1","word2"]" to ["word1","word2"] 即将"["word1","word2"]"["word1","word2"]

Solution (Thanks to @Eric D) 解决方案 (感谢@Eric D)

    let data = stringArrayString.dataUsingEncoding(NSUTF8StringEncoding)

    var stringsArray:[String]!

    do
    {
        stringsArray = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [String]
    } catch
    {
        print()
    }

    print("Array is \(stringsArray)")

Encode your "string array" to data, then decode this data as JSON to a Swift Array. 将您的“字符串数组”编码为数据,然后将此数据作为JSON解码为Swift Array。

Like this, for example: 像这样:

let source = "[\"word1\",\"word2\"]"

guard let data = source.dataUsingEncoding(NSUTF8StringEncoding),
    arrayOfStrings = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String] else {
        fatalError()
}

print(arrayOfStrings)  // ["word1", "word2"]
print(arrayOfStrings[1])  // "word2"

Agree with comments above, I'd probably use a JSON parser. 同意上面的评论,我可能会使用JSON解析器。 Failing that (or if you can't for some reason), I do not know of any built-in way; 如果失败(或者由于某种原因而无法这样做),我不知道有任何内置方式; you'd have to do it manually. 您必须手动进行。 I'd do something like: 我会做类似的事情:

extension String {
    func stringByTrimmingFirstAndLast() -> String {
        let startIndex = self.startIndex.successor()
        let endIndex = self.endIndex.predecessor()
        return self.substringWithRange( startIndex..<endIndex )
    }
}

let str = "[\"word1\",\"word2\"]"
let array = str
    .stringByTrimmingFirstAndLast()
    .componentsSeparatedByString(",")
    .map { string in
        return string.stringByTrimmingFirstAndLast()
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM